使用 Streamwriter 的 C#:尽管使用 Flush(),最后一个 "buffer" 被追加两次

C# using Streamwriter: last "buffer" is appended twice though using Flush()

我阅读了很多关于使用 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

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

您打开或创建文件,但看起来您希望每次都从一个空白文件开始。您所指的文本可能是之前 运行 遗留下来的。查看有关如何从空文件开始的问题

Remove all previous text before writing