Come è possibile che dopo aver chiamato File.Delete
il file esista ancora a volte? Ho usato un codice semplice per riprodurre il problema utilizzando File.Open
. L'eccezione prevista è FileNotFoundException
. Ho controllato l'operazione in Process Monitor v3.05 e il risultato per il file è "DELETE PENDING" e ho generato UnauthorizedAccessException
. Qualcuno ha una spiegazione per questo?Dopo aver eseguito File.Delete, il file rimane in DELETE PENDING
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();
}
}
}
}
Controllare l'antivirus, potrebbe trattarsi di una sospensione del file per un breve periodo. –
Il servizio di indicizzazione di Windows è un altro colpevole standard. –
Lo fa, ma Windows deve attendere fino a quando tutti gli handle sono chiusi prima di cancellarlo, fino a quando non viene cancellato. –