2010-02-08 13 views
11

Buduję aplikację serwera, która kopiuje pliki przy użyciu funkcji System.IO.File.Copy (...). Moje pliki mogą być dość duże, więc istnieje spora szansa, że ​​jeśli komputer się zawiesza, dzieje się to podczas kopiowania.Kopia pliku Atomic pod .NET

Po ponownym uruchomieniu usługi powinienem móc odebrać zadania kopiowania i kontynuować. Jak mogę wykryć, czy kopia została pomyślnie zakończona lub przerwana przez awarię serwera?

Mój obecny plan to skopiowanie plików do tymczasowej nazwy, a po zakończeniu kopiowania zmiana nazwy na ostateczną. W ten sposób nazywanie plików jest w stanie przenosić informacje o stanie na skutek awarii.

Czy masz jakieś dobre/lepsze sugestie?

EDIT: docelowa OS Win2003 jest zatem transakcyjne NTFS nie jest dostępna

+0

Patrz także: http://stackoverflow.com/questions/15274861/file-move-atomic -operacja –

Odpowiedz

10

Inni sugerowali transakcyjny system plików NTFS, który jest odpowiedni, jeśli wdrażasz w systemie Vista lub późniejszym. Jeśli potrzebujesz obsługi XP (lub wcześniejszej), najlepszym rozwiązaniem będzie plik tymczasowy z przeniesieniem (zmiana nazwy).

Odpowiedź na to pytanie dostarcza podobny więcej info: Atomicity of File.Move