使用C#VS 2010,Windows窗体。 我的目标是只打开和关闭文件一次并多次“覆盖”它。我永远不想追加。打开和关闭文件一次的原因是我希望写操作最快。
我在streamwriter构造函数中传递append = false但它仍然附加而不是覆盖。
private void testSpeed()
{
StreamWriter sw1 = new StreamWriter(@"d:\logfolder\overwrite.txt", false);
sw1.AutoFlush = true;
for (int i = 0; i < 5000; i++)
{
sw1.Write(i);
}
sw1.Close();
}
我的预期输出是文件应该只有4999 但我得到了这个 0123456789101112131415161718192021222324252627282930313233 ............... 一直到4999
此文件已存在 d:\ logfolder \ overwrite.txt
任何想法我做错了什么?
答案 0 :(得分:1)
append = false
参数仅适用于流所执行的单个整体写入。每次调用stream.Write()
都会将数据附加到流中已有的内容中。
在每次迭代期间,您需要很可能无效。 Flush()
或Clear()
流,但
要获得你想要的东西,你要么每次都要打开一个新的连接,要么等到最后一个要写的东西。
修改强>
只有sw1.autoflush = true
意味着它会立即将Write()
方法中的上下文写入文件,而不是等到连接关闭。
如果您只想编写集合中的最后一项,则可以执行以下操作:
for (int i = 0; i < 5000; i++)
{
if (i == 4999)
{
sw1.Write(i);
}
}
但是,如果您正在使用List或项目数组,那么您可以执行以下操作:
List<int> nums = new List<int>();
// Note that this requires the inclusion of the System.Linq namespace.
sw1.Write(nums.Last());
答案 1 :(得分:0)
您需要使用
FileStream fs = new FileStream(filename, FileMode.Create, FileAccess.Write);