繁体   English   中英

尽管append = false,但无法使用streamwriter覆盖文件,而没有关闭文件

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM