C# C“使用Streamwriter:last”;“缓冲区”;通过使用Flush()附加了两次

C# C“使用Streamwriter:last”;“缓冲区”;通过使用Flush()附加了两次,c#,text,stream,streamwriter,flush,C#,Text,Stream,Streamwriter,Flush,我读了很多关于使用Streamwriter的书。至少我有一个几乎可以工作的解决方案——但是在一些文件中,最后一行被追加了两次。 我尝试在编写结束时甚至在每个if语句之后插入Flush(),但行为保持不变。也许有人知道答案可以帮我 用例:我从另一个文件中提取信息并将其保存到一个对象中(所有信息都正确存储-我对此进行了测试)。 之后,我调用该方法将存储在对象中的信息写入文件: for (int i = 0; i < allCMs.Count; i++) {

我读了很多关于使用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();
                    }
               }
           }
       }
或者有时像这样:

project: projectname
header: header
src: source

: source

(为了便于理解,我简化了文件)

您打开或创建了文件,但每次似乎都希望从一个空白文件开始。您所指的文本可能是上次运行时留下的。看看这个关于如何从一个空文件开始的问题


您能否提供一个简短但完整的示例来说明问题?我强烈怀疑问题在于您正在覆盖一个现有的(较长的)文件,您只需要将
FileMode.open或create
更改为
FileMode.Truncate
或调用
file.CreateText
FileMode.Truncate
完成了这项工作。我想知道为什么,因为我以前也尝试过手动删除所有文件,并检查过,每个文件只打开一次,但都能正常工作,所以非常感谢:-)@Jon Skeet,非常有用。非常感谢。
project: projectname
header: header
src: source

: source