【问题标题】:Clear the Contents of a File清除文件内容
【发布时间】:2011-02-15 04:49:43
【问题描述】:

如何清除文件内容?

【问题讨论】:

    标签: c# .net file


    【解决方案1】:

    您可以使用File.WriteAllText 方法。

    System.IO.File.WriteAllText(@"Path/foo.bar",string.Empty);
    

    【讨论】:

    • 我有一个硬链接文件,并使用File.WriteAllText,似乎有时(?)会删除文件,因为硬链接没有保持更新。
    • 如果另一个操作将在此操作之后立即访问该文件,我建议您不要这样做。我遇到了在这行代码之后文件没有被关闭写入的问题,并导致IO exceptions of file is in use,所以我建议你通过文件流手动处理它
    【解决方案2】:

    我这样做是为了清除文件内容而不创建新文件,因为我不希望文件显示新的创建时间,即使应用程序刚刚更新了其内容。

    FileStream fileStream = File.Open(<path>, FileMode.Open);
    
    /* 
     * Set the length of filestream to 0 and flush it to the physical file.
     *
     * Flushing the stream is important because this ensures that
     * the changes to the stream trickle down to the physical file.
     * 
     */
    fileStream.SetLength(0);
    fileStream.Close(); // This flushes the content, too.
    

    【讨论】:

    • 我用的是 .NET 3.5,以防万一你想知道版本。
    • Olive,如果它回答了您的问题,请您将其标记为答案。但是,如果建议的解决方案不适用于您的情况,即使在那时也请告知我们。
    • +1 只有这样才能先获取文件锁,安全检查文件属性,最后清除内容。
    • 这正是我自己需要的......我需要让服务与应用程序通信,以便向用户发送简单的逐行消息,这使我可以保持文件锁定和清除消息以防止服务应用插入和无意中丢弃消息或复制消息。
    • 在 using 块中创建文件流不是可取的吗?这也会自动关闭流。
    【解决方案3】:

    每次创建文件时都使用FileMode.Truncate。还将File.Create 放在try catch 内。

    【讨论】:

      【解决方案4】:

      最简单的方法是:

      File.WriteAllText(path, string.Empty)
      

      但是,我建议你使用FileStream,因为第一个解决方案可以抛出UnauthorizedAccessException

      using(FileStream fs = File.Open(path,FileMode.OpenOrCreate, FileAccess.ReadWrite))
      {
           lock(fs)
           {
                fs.SetLength(0);
           }
      }
      

      【讨论】:

        【解决方案5】:

        尝试使用类似的东西

        File.Create

        在 指定路径。

        【讨论】:

        • 对于所提出的问题不是一个好主意:不删除文件中已有的数据 - 它只会将其覆盖到新数据的长度,所以如果旧数据>新数据你最终会两者混合。
        【解决方案6】:

        最简单的方法可能是通过您的应用程序删除文件并创建一个具有相同名称的新文件...更简单的方法是让您的应用程序用新文件覆盖它。

        【讨论】:

        • 如果您在删除后不久尝试创建文件,可能会出现问题。有时操作系统无法创建文件,因为它“认为”文件仍然存在。
        • @Dmitry Lobanov - [我知道这是一个旧线程]。我不接受操作系统有时认为文件仍然存在,除非有充分的理由。如果确实如此,那将是一个非常糟糕的操作系统。更有可能的是,现有文件上仍有一个句柄打开。如果您在关闭文件时不小心(例如通过使用“使用”来确保处置),它甚至可能是您自己的软件。也可能是杀毒软件。不过同意你的结论。我认为 FileMode.Truncate 是要走的路。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-03-14
        • 1970-01-01
        • 2011-05-21
        • 1970-01-01
        • 2011-02-11
        • 2010-11-07
        • 1970-01-01
        相关资源
        最近更新 更多