Csharp/C#教程:Streamwriter有时会在一条线的中间切断我的最后几行?分享


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

(0)
上一篇 2021年12月20日
下一篇 2021年12月20日

精彩推荐