2016-06-24 6 views
-2

ファイルのリストを1行ずつ読むにはどうすればよいですか? 私はいくつかのファイルを持つディレクトリを持っています。私はリストにすべてのファイルを保存し、行ごとに1つずつ処理する必要があります。各ファイルの行を読むc#

これまでのところ、私は次のことを行っている:

//fetching all files from directory 
DirectoryInfo d = new DirectoryInfo("path"); 
Dictionary<int, FileInfo> DatFiles = new Dictionary<int, FileInfo>(); 
int filecounter = 1; 


foreach (var dat in d.EnumerateFiles()) 
{ 
    DatFiles.Add(filecounter, dat); 
    filecounter++; 
} 
    Console.WriteLine(filecounter); 
foreach (var fileName in DatFiles) 
{ 

    foreach (var line in File.ReadLines(fileName.Value.OpenText().ToString())) 
    { 
     //run some methods 
    } 
} 

実行する場合、私は例外、ファイルが見つかりませんを取得しています。リストにはファイル名がいっぱいですが。

+0

これらはすべてテキストファイルですか、任意のタイプですか? – Ian

+6

上記のコードではどのような正確な問題が発生していますか? –

+0

DirectoryInfoで閉じていたファイルの一覧を取得するには、[GetFiles](https://msdn.microsoft.com/en-us/library/system.io.directoryinfo(v = vs.110))を呼び出します。 aspx)メソッド。ファイルからテキストコンテンツを読み取るには、[StreamReader](https://msdn.microsoft.com/en-us/library/system.io.streamreader(v = vs.110).aspx)を読んでください。 – Igor

答えて

1

EnumerateFiles()を参照してください失敗し、File.ReadLines()stringパス引数を取ります。 foreachにはFile.ReadLines(fileName.Value.FullName)を使用して、実際のファイルへのパスを指定します。 OpenText()は、StreamReaderオブジェクトを返します。

+0

ありがとう、それは働いた。素晴らしい説明:) – WT86

+0

なぜFileInfoを既に持っているときにFile.ReadLines()を使うのですか? – Paparazzi

+1

@Paparazziファイルの行だけが必要な場合は、StreamReaderオブジェクトを管理してそのすべてを処理する必要はありません。フレームワークがそれを処理させます。この方法は、彼のユースケースではより簡潔に見えるだけでなく、プレゼンテーションしていたスタイルにとどまります。 – Kateract

0

この小さなコードはタスク他のすべて

var files = Directory.GetFiles("path"); 
foreach(var f in files) 
{ 
    using(StreamReader reader = new StreamReader(f)) 
    { 
     var lines = reader.ReadToEnd().Split(new string[]{Environment.NewLine}); 
// Do here 
    } 

} 
+0

OPにはFileInfoがあります。なぜそれを使わないのですか? ReadLineメソッドがある場合、すべての行を読み込んで分割するのはなぜですか? – Paparazzi

+0

これは私が彼が望んだと思ったことはすべてだったのですが、彼は行ごとに読むことができます – MoustafaS

0

を行う必要がFileInfoオブジェクトのリストを返しますdocumentation

// Open the stream and read it back. 
using (StreamReader sr = fi.OpenText()) 
{ 
    string s = ""; 
    while ((s = sr.ReadLine()) != null) 
    { 
     Console.WriteLine(s); 
    } 
}