【问题标题】:C# using Streamwriter: last "buffer" is appended twice though using Flush()使用 Streamwriter 的 C#:尽管使用 Flush(),最后一个“缓冲区”被附加了两次
【发布时间】:2015-09-28 23:17:51
【问题描述】:

我已经阅读了很多关于使用 Streamwriter 的信息。至少我有一个几乎可以工作的解决方案——但在某些文件中,最后一行被附加了两次。 我尝试在写作结束时甚至在每个 if 语句之后插入 Flush(),但行为保持不变。也许有人知道答案并可以帮助我?

用例:我从另一个文件中提取信息并将它们保存在一个对象中(所有信息都正确存储 - 我对此进行了测试)。 之后我调用该方法将存储在对象中的信息写入文件:

for (int i = 0; i < allCMs.Count; i++)
        {
            using (var stream = File.Open(allCMs[i].dir,   
            FileMode.OpenOrCreate, FileAccess.Write))
            {
                using (StreamWriter writer = new StreamWriter(stream))
                {
                    writer.WriteLine(version);
                    writer.WriteLine();
                    if (allCMs[i].name != null)
                    {
                        writer.WriteLine(addProject(allCMs[i].name));
                        writer.WriteLine();
                        writer.Flush();
                    }

                    if (allCMs[i].header != null)
                    {
                        writer.WriteLine(addHeader(allCMs[i].header));
                        writer.WriteLine();
                        writer.Flush();
                    }

                    if (allCMs[i].src != null)
                    {
                        writer.WriteLine(addSrc(allCMs[i].src));
                        writer.WriteLine();
                        writer.Flush();
                    }
               }
           }
       }

txt中的输出如下:

project: projectname
header: header
src: source

src: source

或者有时像这样:

project: projectname
header: header
src: source

: source

(我简化了文件以便理解)

【问题讨论】:

  • 您能否提供一个简短但完整的示例来说明该问题?我强烈怀疑问题在于您正在覆盖现有的(较长的)文件,并且您只需将FileMode.OpenOrCreate 更改为FileMode.Truncate 或直接调用File.CreateText。
  • FileMode.Truncate 完成了这项工作。我想知道为什么,因为我之前也尝试过手动删除所有文件并检查过,每个文件只打开一次但它可以工作,所以非常感谢:-)
  • @Jon Skeet,真的很有帮助。谢谢。

标签: c# text stream streamwriter flush


【解决方案1】:

您打开或创建文件,而看起来您每次都希望从一个空白文件开始。您所指的文本可以从上一次运行中遗留下来。看看这个关于如何从空文件开始的问题

Remove all previous text before writing

【讨论】:

    猜你喜欢
    • 2011-10-22
    • 1970-01-01
    • 1970-01-01
    • 2014-06-29
    • 2013-03-18
    • 2019-10-06
    • 2011-05-10
    相关资源
    最近更新 更多