Streamwriter有时会在一条线的中间切断我的最后几行?

Bil*_*hip 13 c# streamwriter

这是我的代码.:

FileStream fileStreamRead = new FileStream(pathAndFileName, FileMode.OpenOrCreate, FileAccess.Read, FileShare.None);
FileStream fileStreamWrite = new FileStream(reProcessedFile, FileMode.OpenOrCreate, FileAccess.Write, FileShare.None);

                StreamWriter sw = new StreamWriter(fileStreamWrite);

                int readIndex = 0;
                using (StreamReader sr = new StreamReader(fileStreamRead))
                {
                    while (!sr.EndOfStream) {
                        Console.WriteLine("eof" + sr.EndOfStream);
                        readIndex++;
                        Console.WriteLine(readIndex);
                        string currentRecord = "";
                        currentRecord = sr.ReadLine();
                        if (currentRecord.Trim() != "")
                        {
                            Console.WriteLine("Writing " + readIndex);
                            sw.WriteLine(currentRecord);
                        }
                        else {
                            Console.WriteLine("*******************************************spaces ***********************");
                        }
                    }
Run Code Online (Sandbox Code Playgroud)

它使用一个测试文件和半行来切断2行,然后使用另一个测试文件对齐1行和半行.

我不是你可能看到的流道读者/作家专家.

任何想法或建议将不胜感激,因为这会让我感到沮丧.我确信这是我错误地使用这些.

Ale*_*kov 19

你错过了Flush/Close或者只是using为了你的作家.

using(FileStream fileStreamWrite = 
  new FileStream(reProcessedFile, FileMode.OpenOrCreate, FileAccess.Write, FileShare.None);
{
  using(StreamWriter sw = new StreamWriter(fileStreamWrite))
  {
   // .... write everything here
  }
}
Run Code Online (Sandbox Code Playgroud)

  • @Tigran - 大多数Writer和Stream类都有有限大小的内部缓冲区,因此它们会定期将数据提交给底层存储.结果存储了一些数据,但如果没有刷新/关闭,则最后一个块可能会丢失. (3认同)

cod*_*ife 9

using语句的结束括号之后,执行以下操作:

sw.Flush();
sw.Close();
Run Code Online (Sandbox Code Playgroud)

在那里,应该这样做.