执行File.Delete后,文件仍处于DELETE PENDING
After executing File.Delete, the file remains in DELETE PENDING
怎么可能有时候调用File.Delete
后文件还存在呢?我使用简单的代码通过 File.Open
重现了该问题。预期的异常是 FileNotFoundException
。我检查了 Process Monitor v3.05 中的操作,文件的结果是 "DELETE PENDING" 并抛出 UnauthorizedAccessException
。有人对此有解释吗?
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 调用后仍然存在。之后尝试打开文件的任何人都会收到拒绝访问错误。在文件对象的最后一个句柄关闭之前,文件实际上并没有被删除。
怎么可能有时候调用File.Delete
后文件还存在呢?我使用简单的代码通过 File.Open
重现了该问题。预期的异常是 FileNotFoundException
。我检查了 Process Monitor v3.05 中的操作,文件的结果是 "DELETE PENDING" 并抛出 UnauthorizedAccessException
。有人对此有解释吗?
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 调用后仍然存在。之后尝试打开文件的任何人都会收到拒绝访问错误。在文件对象的最后一个句柄关闭之前,文件实际上并没有被删除。