大きなテキスト ファイル (14MB) を読み取り、各行を文字列のリストに入れようとしており、そこから個別の文字列を取得してから、別のテキスト ファイルに書き戻そうとしています。次のコードを使用します。
static void removeDuplicates(string filename)
{
//Reading from the file
Console.WriteLine("Reading from the file....");
StreamReader sr = new StreamReader(filename);
List<string> namesList = new List<string>();
while (!sr.EndOfStream)
{
namesList.Add(sr.ReadLine());
}
//Getting the distinct list
namesList=namesList.Distinct().ToList<string>();
Console.WriteLine("Writing to the new file");
//writing back to the file
StreamWriter sw = new StreamWriter(filename + "_NoDuplicates",false);
for (int i = 0; i < namesList.Count; i++)
{
sw.Write(namesList[i] + "\r\n");
}
}
問題は、streamWriter が常に特定の行数の後に書き込みを停止し、常に同じ場所で書き込みを停止することです。
List の内容が正しいこと、およびループがリスト内のすべての項目を通過することを確認しました。これは単なる streamWriter の問題です。
このリストには、Distinct() の前に 1048577 項目、Distinct() の後に 880829 項目が含まれています。
streamWriter は文字列番号 880805 の途中で書き込みを停止し、その後は何も書き込みません。単語の途中で停止することさえあります。
なぜそれが起こっているのですか、私は何を間違っていますか?