Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.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# 执行File.Delete后,文件仍处于删除挂起状态_C#_Io - Fatal编程技术网

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中检查了操作,该文件的结果是“删除挂起”和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();
            }
        }
    }
}

Windows允许进程删除文件,即使该文件仍由其他进程打开(例如Windows索引服务或防病毒)。它在内部被标记为“delete pending”。该文件实际上并没有从文件系统中删除,它在file.Delete调用之后仍然存在。在此之后试图打开文件的任何人都会出现访问被拒绝错误。在关闭文件对象的最后一个句柄之前,该文件实际上不会被删除。

检查防病毒软件,可能是它在文件上保留了一段时间。Windows索引服务是另一个标准的罪魁祸首。它确实存在,但Windows需要等到所有句柄都关闭后才能真正删除它,在此之前,它将删除挂起。