执行File.Delete后,该文件仍处于DELETE PENDING状态

时间:2015-04-27 09:30:59

标签: c# io

在调用File.Delete之后,文件有时仍然存在?我使用简单代码使用File.Open重现问题。预期的例外是FileNotFoundException。我检查了Process Monitor v3.05中的操作,文件的结果是" DELETE PENDING"和throwns 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();
            }
        }
    }
}

1 个答案:

答案 0 :(得分:2)

Windows允许进程删除文件,即使它仍由另一个进程(例如Windows索引服务或防病毒软件)打开。它内部标记为"删除待处理"。该文件实际上并没有从文件系统中删除,它在File.Delete调用后仍然存在。任何试图打开该文件后获得访问被拒绝错误的人。在文件对象的最后一个句柄关闭之前,该文件实际上并未被删除。