C# C“使用Streamwriter:last”;“缓冲区”;通过使用Flush()附加了两次
我读了很多关于使用Streamwriter的书。至少我有一个几乎可以工作的解决方案——但是在一些文件中,最后一行被追加了两次。 我尝试在编写结束时甚至在每个if语句之后插入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++) {
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