File.ReadAllLines
遅延ロードではなく、すべてをメモリにロードします。
string[] allLines = File.ReadAllLines(filePath);
LINQ の遅延実行を使用する場合は、File.ReadLines
代わりに使用できます。
var fileLines = File.ReadLines(filePath)
.Where(line =>
{
line = line.Trim();
return line.Contains("hello");
});
これも文書化されています:
ReadLines
とReadAllLines
メソッドは次
のように異なります。を使用するReadLines
と、コレクション全体が返される前に文字列のコレクションの列挙を開始できます。を使用する場合ReadAllLines
、配列にアクセスする前に、文字列の配列全体が返されるまで待つ必要があります。したがって、非常に大きなファイルを操作している場合は、ReadLines の方が効率的です。
ReadLines
ただし、重複して使用することはできないので注意が必要です。もう一度「実行」しようとするとObjectDisposedException
、基になるストリームが既に破棄されているため、 が返されます。更新 このバグは修正されたようです。
これにより、たとえば次のような例外が発生します。
var lines = File.ReadLines(path);
string header = lines.First();
string secondLine = lines.Skip(1).First();
ストリームがまだ開いているため、同じファイルへの書き込みにも使用できません。
File.WriteAllLines(path, File.ReadLines(path)); // exception: being used by another process.
これらの場合File.ReadAllLines
は、より適切です。