[英]unable to overwrite file using streamwriter despite append= false, without closing file
使用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()
调用stream.Write()
将数据追加到流中已经存在的内容。
您可能需要在每次迭代期间对流进行
这很可能行不通。 Flush()
或
Clear()
,尽管
要获得所需的内容,您要么每次都要打开一个新连接,要么等到最后一个要写的内容。
编辑
sw1.autoflush = true
仅表示将Write()
方法中的上下文立即Write()
文件,而不是等待连接关闭。
如果您只想写集合中的最后一项,则可以执行以下操作:
for (int i = 0; i < 5000; i++)
{
if (i == 4999)
{
sw1.Write(i);
}
}
但是,如果您使用的是列表或项目数组,则可以执行以下操作:
List<int> nums = new List<int>();
// Note that this requires the inclusion of the System.Linq namespace.
sw1.Write(nums.Last());
您需要使用
FileStream fs = new FileStream(filename, FileMode.Create, FileAccess.Write);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.