0

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

我试过了:

 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 工作。

如何覆盖文件内容?

4

2 回答 2

2

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

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

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

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

于 2012-12-17T12:51:17.313 回答
0

您也可以使用以下代码

System.IO.File.WriteAllText(@"Path of your file",string.Empty);
于 2012-12-17T10:09:12.737 回答