另一个进程使用的空文件内容

时间:2012-12-17 09:36:52

标签: c# file-io streamwriter

我有我的应用程序的日志文件,我在日志文件上通过双面应用程序进行一些操作。  在操作结束时,我想删除文件 - 这是不可能的,因为我只是想清空它 - 删除内容。

我试过了:

 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的作品。

如何覆盖文件内容?

2 个答案:

答案 0 :(得分:2)

  

完全没有。它会崩溃,因为文件正由另一个进程使用

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

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

另一个有用的选项是FileOptions.DeleteOnClose。现在它是完全自动的,文件会自动删除,而您根本不需要做任何事情。在你的情况下,我不知道哪一个是最好的,你可能想避免在你的程序崩溃时删除日志文件,所以FileShare.Delete是最好的。

答案 1 :(得分:0)

您也可以使用以下代码

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