2012-08-08 14 views
8

Aplikacja musi utworzyć plik w katalogu, zrób coś w katalogu, a następnie usuń plik. Na przykład, kod źródłowy poniżej:Tworzenie, usuwanie pliku Przyczyny IOException

File.Create("textfile.txt"); 
// Do something here 
File.Delete("textfile.txt"); 

Jeśli „coś” jest procesem, który wymaga jedynie bardzo krótki okres czasu, File.Delete rzuci IOException (plik jest używany przez inny proces). Według innego wpisu SO: Cannot delete directory with Directory.Delete(path, true), wywołanie Thread.Sleep (0) powinno pozwolić na zakończenie poprzedniego procesu. Jednak nawet z

File.Create("textfile.txt"); 
// Do something here 
Thread.Sleep(0); 
File.Delete("textfile.txt"); 

samo IOException wciąż być wyrzucone.

Rozwiązaniem, które otrzymałem, jest pętla while, która próbuje usunąć plik wielokrotnie, dopóki go nie usunie. Ale zastanawiam się, czy jest lepsze rozwiązanie.

+1

Dziękuję za bardzo szybkie odpowiedzi (i wskazanie na MSDN.) Z pewnością nie czuję się teraz zbyt dobrze). Pójdę z @usr, ponieważ on jest pierwszy. Ale proszę przyjąć +1 jako moje podziękowanie. – Jim

Odpowiedz

16

File.Create zwraca obiekt FileStream, który reprezentuje otwarty uchwyt do tego pliku. Zawiń wynik tego wywołania w bloku blokującym, aby zamknąć uchwyt w sposób deterministyczny.

21

Metoda File.Create utworzy strumień plików, który będzie trzeba poprawnie usunąć. Proponuję następujący kod:

using(FileStream fs = File.Create("textfile.txt")) 
{ 
    // Do something here. 
} 
File.Delete("textfile.txt"); 

Zauważ, że ten kod jest dokładnie tak, jak sugeruje się w dokumentacji MSDN ...

3

File.Create zwraca FileStream, który jest otwarty uchwyt do tego pliku. Użyj tego zamiast:

using(FileStream fs = File.Create("textfile.txt")) 
{} 

File.Delete("textfile.txt"); 
4

Należy również pamiętać: Jeśli nie chcesz napisać coś do pliku, można uniknąć „używając” na dwa sposoby:

(1) File.WriteAllText("textfile.txt", string.Empty); 
(2) File.Create("textfile.txt").Dispose(); 

w przypadku (2) można bezpiecznie uniknąć użycia, ponieważ nie robisz nic, co mogłoby rzucić wyjątek między jego utworzeniem a wyrzuceniem.