プロジェクトを作成していますが、ファイルから行を削除する必要があります。例: (「list.txt」などのファイルから読み取る)
1 Hello DELETE
2 Hi DELETE
3 Hey DELETE
どうしようかと考えてみたのですが、なかなか方法が見つかりません。私もGoogleで検索してみました。
プロジェクトを作成していますが、ファイルから行を削除する必要があります。例: (「list.txt」などのファイルから読み取る)
1 Hello DELETE
2 Hi DELETE
3 Hey DELETE
どうしようかと考えてみたのですが、なかなか方法が見つかりません。私もGoogleで検索してみました。
テキストファイルから行を削除する代わりに、書き換えたほうがよいでしょう。すべての大きなテキスト ファイルがある場合、すべての行をメモリに読み込むことはあまり最適化されていません。ReadLines
メソッドは、このケースに対処する途中でダウンしています
ReadLines を使用すると、コレクション全体が返される前に、文字列のコレクションの列挙を開始できます。ReadAllLines を使用する場合、配列にアクセスする前に、文字列の配列全体が返されるまで待機する必要があります。したがって、非常に大きなファイルを操作している場合は、ReadLines の方が効率的です。
行を削除する必要があるかどうかを確認する方法があるとします。
bool ShouldDeleteLine(string line)
{
}
コード:
string tempFile = Path.GetTempFileName();
var lines = File.ReadLines("list.txt")
.Where(line => !ShouldDeleteLine(line));
File.WriteAllLines(tempFile, lines);
File.Delete("list.txt");
File.Move(tempFile, "list.txt");
すべての行をメモリに読み込み、削除したい行を除いてファイルに書き戻します。一度にすべてをメモリに保存できない非常に大きなファイルの場合は、一度に数行移動して新しいファイルに書き込むことができます (削除する行を除く)。次に、元のファイルを確認したら、先に進んで削除し、新しいファイルの名前を元の名前に変更します。
次のようなものを使用します。
void DeleteLines()
{
var filePath = @"path/to/file.txt";
string[] lines = File.ReadAllLines(filePath);
File.WriteAllLines(filePath, lines.Where(KeepLine));
}
bool KeepLine(string line)
{
// Decide whether to keep this line. The line below for example
// Keeps all lines except the ones containing the word "Hey".
return !line.Contains("Hey");
}
ファイル全体をメモリに読み込み、すべての行を書き込んでファイルに戻します。