【问题标题】:How to clear file content without closing it?如何在不关闭文件的情况下清除文件内容?
【发布时间】:2014-06-27 13:42:29
【问题描述】:

我有一个文件,由一行组成,我打算经常写它。因此,我不想一遍又一遍地关闭并重新打开它。相反,我想调用一些会删除文件内容的东西。

实现我的想法的一种方法是执行以下操作:

        int i0 = 0;
        using (var f = File.OpenWrite("testfile.txt"))
        {
            while (true)
            {
                f.Position = 0;
                using (var sw = new StreamWriter(f, Encoding.UTF8, 1024, true))
                {
                    if (i0 == 1)
                    {
                        sw.WriteLine("short line");
                        break;
                    }
                    if (i0==0)
                    {
                        sw.WriteLine("this is a veeeery long test line");
                        i0++;
                    }


                    sw.Flush();
                }
            }
        }

但是,这将导致文件具有以下内容:

short line
eeery long test line

虽然我可以使用它(反正我只需要第一行的内容),但感觉很乱。

相反,我想以文件内容结束:

short line

有没有更好的方法来做到这一点?

【问题讨论】:

  • 你想做什么?
  • 你测试过吗,你确定打开文件与数据库中的其他东西相比是“昂贵的”吗?
  • @ScottChamberlain 是的。据我所知,打开和关闭文件是您可以对文件执行的最昂贵的操作之一
  • 所以你从来没有用你的应用程序测量过它,你只是在预感吗?我建议使用代码分析器对其进行测量,看看它是否需要您认为需要的时间(不,更可能的是,执行Flush() 操作是您可以对文件执行的最昂贵的操作)。

标签: c# file file-io stream


【解决方案1】:

您可以使用FileStream.SetLength() 截断,也可以使用FileStream.Position 和/或FileStream.Seek() 移回文件开头。这不需要昂贵的关闭和重新打开流。

【讨论】:

  • 已测试:在using{} 之后添加 SetLength 并不会真正删除代码中的第二行
  • @ArsenZahray 请用新的代码更改编辑您的问题,以便我重新检查它(只需创建名为 EDIT 的新部分并发布您的新当前代码)以查看问题可能出在哪里。
【解决方案2】:

你可以重写文件: http://msdn.microsoft.com/en-us/library/92e05ft3%28v=vs.110%29.aspx

File.WriteAllLines(String filePath, String[] linesToWrite);

不过,这确实会打开和关闭文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-02
    • 2021-08-23
    • 1970-01-01
    • 1970-01-01
    • 2011-10-29
    • 1970-01-01
    相关资源
    最近更新 更多