Jak to możliwe, że po wywołaniu File.Delete
plik nadal istnieje? Użyłem prostego kodu do odtworzenia problemu przy użyciu File.Open
. Oczekiwany wyjątek to FileNotFoundException
. Sprawdziłem operację w Process Monitor v3.05, a wynik dla pliku to "DELETE PENDING" i generuje wynik UnauthorizedAccessException
. Czy ktoś ma wytłumaczenie tego?Po uruchomieniu File.Delete plik pozostaje w trybie 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();
}
}
}
}
Sprawdź program antywirusowy, może to oznaczać, że blokuje on plik. –
Usługa indeksowania systemu Windows jest innym standardowym winowajcą. –
To prawda, ale system Windows musi poczekać, aż wszystkie klamki zostaną zamknięte przed usunięciem, dopóki nie zostanie usunięty. –