Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 其他进程使用的空文件内容_C#_File Io_Streamwriter - Fatal编程技术网

C# 其他进程使用的空文件内容

C# 其他进程使用的空文件内容,c#,file-io,streamwriter,C#,File Io,Streamwriter,我有一个应用程序的日志文件,我在日志文件上通过应用程序进行一些操作。 在操作结束时,我想删除文件-这是不可能的,因为使用了文件,所以我只想清空它-删除内容 我试过: using (FileStream stream = File.Open(query.FileName, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite)) { using (StreamWriter writer = new

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

我试过:

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

以及:

诺蒂赫工作


如何覆盖文件内容?

您也可以使用下面的代码

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

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

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

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


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

一点也不。它将崩溃,因为另一个进程正在使用该文件。我无法更改文件创建。它是由EnterpriceLibrary创建的,只有在应用程序完成工作后才会发布。其想法是在晚上将日志文件从客户端删除到服务器中,我必须在复制到服务器后立即删除该文件,以避免复制两次。显然,如果您无法更改任何内容,这将很难修复。一个明智的做法是不复制日志文件。我可以更改,我必须这样做。但这是一个新问题,谢谢。
System.IO.File.WriteAllText(@"path", string.Empty);
System.IO.File.WriteAllText(@"Path of your file",string.Empty);