尽管append=false,但无法在不关闭文件的情况下使用streamwriter覆盖文件

本文关键字:文件 情况下 覆盖 streamwriter false append 尽管 | 更新日期: 2024-09-17 02:46:24

使用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,但无法在不关闭文件的情况下使用streamwriter覆盖文件

append = false参数只适用于流执行的单个整体写入。对stream.Write()的每次调用都会将数据附加到流中已经存在的数据中。

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

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

编辑

拥有sw1.autoflush = true只意味着它将立即将Write()方法中的上下文写入文件,而不是等待连接关闭。

如果你只想写你收藏的最后一件物品,你可以做以下事情:

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

然而,如果您使用的是List或Array项目,那么您可以执行以下操作:

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