【发布时间】: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