C# 执行File.Delete后,文件仍处于删除挂起状态
调用C# 执行File.Delete后,文件仍处于删除挂起状态,c#,io,C#,Io,调用File.Delete后,文件有时仍然存在,这是怎么可能的?我使用了简单的代码,使用File.Open重现了这个问题。预期的异常是FileNotFoundException。我在Process Monitor v3.05中检查了操作,该文件的结果是“删除挂起”和thrownsUnauthorizedAccessException。有人对此有解释吗 public class Program { private const string DummyFileName = "dummy.tx
File.Delete
后,文件有时仍然存在,这是怎么可能的?我使用了简单的代码,使用File.Open
重现了这个问题。预期的异常是FileNotFoundException
。我在Process Monitor v3.05中检查了操作,该文件的结果是“删除挂起”和thrownsUnauthorizedAccessException
。有人对此有解释吗
public class Program
{
private const string DummyFileName = "dummy.txt";
private static void Main(string[] args)
{
int attempt = 0;
while (true)
{
using (File.Create(DummyFileName))
{
}
File.Delete(DummyFileName);
try
{
attempt++;
using (File.Open(DummyFileName, FileMode.Open, FileAccess.ReadWrite, FileShare.None))
{
}
}
catch (FileNotFoundException)
{
}
catch (UnauthorizedAccessException ex)
{
Console.WriteLine("File exists{0}", File.Exists(DummyFileName));
Console.WriteLine("File remains in DELETE PENDING state in attempt {0}.", attempt);
Console.WriteLine(ex);
Console.ReadKey();
}
}
}
}
Windows允许进程删除文件,即使该文件仍由其他进程打开(例如Windows索引服务或防病毒)。它在内部被标记为“delete pending”。该文件实际上并没有从文件系统中删除,它在file.Delete调用之后仍然存在。在此之后试图打开文件的任何人都会出现访问被拒绝错误。在关闭文件对象的最后一个句柄之前,该文件实际上不会被删除。检查防病毒软件,可能是它在文件上保留了一段时间。Windows索引服务是另一个标准的罪魁祸首。它确实存在,但Windows需要等到所有句柄都关闭后才能真正删除它,在此之前,它将删除挂起。