尽管append = false,但无法关闭文件,因此无法使用streamwriter覆盖文件

使用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

我的错误是什么想法?

append = false参数仅适用于流所执行的单个整体写入。 每次调用stream.Write()将数据附加到流中已有的数据中。

在每次迭代期间,您可能需要Flush()Clear()流,尽管这很可能不起作用。

要得到你想要的东西,你要么每次都要打开一个新的连接,要么等到最后一个要写的东西。

编辑

sw1.autoflush = true只表示它会立即将Write()方法中的上下文Write()文件,而不是等到连接关闭。

如果您只想编写集合中的最后一项,则可以执行以下操作:

 for (int i = 0; i < 5000; i++) { if (i == 4999) { sw1.Write(i); } } 

但是,如果您正在使用List或项目数组,那么您可以执行以下操作:

 List nums = new List(); // Note that this requires the inclusion of the System.Linq namespace. sw1.Write(nums.Last()); 

你需要使用

FileStream fs = new FileStream(filename, FileMode.Create, FileAccess.Write);