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 ***********************"); } }
它使用一个测试文件和半行来切断2行,然后使用另一个测试文件对齐1行和半行。
我不是你可能看到的流读者/作家专家。
任何想法或建议将不胜感激,因为这会让我感到沮丧。 我确信这是我错误地使用这些。
您缺少Flush / Close或只是为您的作家使用。
using(FileStream fileStreamWrite = new FileStream(reProcessedFile, FileMode.OpenOrCreate, FileAccess.Write, FileShare.None); { using(StreamWriter sw = new StreamWriter(fileStreamWrite)) { // .... write everything here } }
在using
语句的右括号之后,执行以下操作:
sw.Flush(); sw.Close();
在那里,应该这样做。
你需要Flush
你的StreamWriter
。 StreamWriter有一个缓冲区,只有当缓冲区已满时才会写入磁盘。 通过最后刷新,确保缓冲区中的所有文本都写入磁盘。
除了其他答案(使用和/或flush/close
)之外,还会说他们实际上没有回答这个问题:“为什么它可能会削减几行。”
我有一个关于主题的想法 ,它与你使用StreamReader
并调用EndOfStream
两次的事实有关:在while
循环头中,另一个在其中。
了解stream
结束的唯一可能方法是尝试从中读取一些数据。 所以我怀疑EnfOfStream
这样做,并且读取它两次,可能会在流处理中产生问题。
要解决问题:
您没有正确使用StreamWriter。 此外,由于你总是阅读线条,我会使用一种方法,已经为你做了所有这些(并妥善管理)。
using (var writer = new StreamWriter("path")) { foreach(var line in File.ReadLines("path")) { if (string.IsNullOrWhiteSpace(line)) { /**/ } else { /**/ } } }
… 要么 …
上述就是C#学习教程:Streamwriter有时会在一条线的中间切断我的最后几行?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
/* do not call .ToArray or something that will evaluate this _here_, let WriteAllLines do that */ var lines = File.ReadLines("path") .Select(line => string.IsNullOrWhiteSpace(line) ? Stars : line); var encoding = Encoding.ASCII; // whatever is appropriate for you. File.WriteAllLines("path", lines, encoding);
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/984267.html