【问题标题】:Empty File Content Which Used by Another Process另一个进程使用的空文件内容
【发布时间】:2012-12-04 09:28:33
【问题描述】:

我有一个应用程序的日志文件,我通过应用程序对日志文件进行了一些操作。 在操作结束时,我想删除文件——这是不可能的,因为使用了文件,所以我只想清空它——删除内容。

我试过了:

 using (FileStream stream = File.Open(query.FileName, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite))
        {
            using (StreamWriter writer = new StreamWriter(stream, true))
            {
                writer.Write("");
                reader.Close();
            }
        }

和:

using (FileStream stream = File.Open(query.FileName, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite))
    {
        stream.SetLength(0);
        stream.Close();
    }

和:

System.IO.File.WriteAllText(@"path", string.Empty);

Notihg 有效。

如何覆盖文件内容?

【问题讨论】:

    标签: c# file-io streamwriter


    【解决方案1】:

    一点也不。它会崩溃,因为文件正在被另一个进程使用

    嗯,它可能不是另一个进程,它可能是你的。您必须在关闭日志文件后执行此操作。但是有一个更通用的解决方法。返回到创建日志文件的代码并添加 FileShare.Delete 选项。

    此选项允许删除正在使用的文件。您现在可以在代码中简单地使用 File.Delete(),即使日志文件仍处于打开状态。这将使文件处于“删除挂起”状态,任何试图打开它的人都会被拒绝访问错误。当文件的最后一个句柄关闭时,磁盘上的文件会自动消失。

    另一个有用的选项是 FileOptions.DeleteOnClose。现在它是完全自动的,文件会自动删除,您无需做任何事情。我不知道哪一个最适合您,您可能希望在程序崩溃时避免删除日志文件,因此 FileShare.Delete 是最好的。

    【讨论】:

    • 我无法更改文件创建。它是由 EnterpriceLibrary 创建的,只有在应用程序完成工作时才会发布。想法是在晚上将日志文件从客户端删除到服务器,我必须在复制到服务器后立即删除文件,以免被复制两次。
    • 显然,如果您无法更改任何内容,这将很难解决。一个理智的方法是不复制日志文件。
    • 我可以改变,我必须这样做。但这是一个新问题,谢谢。
    【解决方案2】:

    你也可以使用下面的代码

    System.IO.File.WriteAllText(@"Path of your file",string.Empty);
    

    【讨论】:

    • 一点也不。它会崩溃,因为文件正在被另一个进程使用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-07
    • 2017-05-25
    • 2013-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-04
    相关资源
    最近更新 更多