尽管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);