2010-10-17 16 views
9

Czy ktoś ma jakieś pomysły, jak pragmatycznie szybko sprawdzić, czy plik zip jest uszkodzony na podstawie rozmiaru pliku? Najlepszym sposobem sprawdzenia, czy zip jest uszkodzony, jest sprawdzenie CRC, ale może to zająć dużo czasu, szczególnie jeśli jest dużo dużych plików zip. Byłbym szczęśliwy, gdyby udało mi się zrobić szybki rozmiar pliku lub sprawdzić nagłówek.Jak szybko sprawdzić, czy plik zip jest uszkodzony?

Z góry dziękuję.

+0

Dowolny wybrany język? – birryree

+0

Obecnie używam C# do mojego zadania, ale język nie ma znaczenia. – thuantta

Odpowiedz

3

mówi, że skompresowany rozmiar to 4 bajty, począwszy od bajtu 18. Możesz spróbować odczytać i porównać go z rozmiarem pliku.

Jednak myślę, że to dość dużo bezużyteczny dla sprawdzenia, czy plik zip jest uszkodzony z dwóch powodów:

  1. Niektóre pliki zip zawierać więcej bajtów niż tylko część zip. Na przykład: self-extracting archives ma część wykonywalną, ale nadal jest prawidłowym zipem.
  2. Plik może zostać uszkodzony bez zmiany jego rozmiaru.

Proponuję więc obliczenie CRC dla gwarantowanej metody sprawdzania korupcji.

+0

Również wiele narzędzi do tworzenia zip zapisuje nagłówek, zanim pozna długość pliku, więc te bajty pozostają zerem (prawdopodobnie w celu obsługi przesyłania strumieniowego). – SimonJ

+0

Co powiedział @SimonJ jest prawdą, ale także - skompresowany rozmiar począwszy od bajtu 18 jest skompresowanym rozmiarem pojedynczego wpisu w pliku zip. To nie jest skompresowany rozmiar pliku zip. – Cheeso

+0

Ponadto może to być oczywiste, ale warto powiedzieć: "obliczanie CRC" działa w celu zweryfikowania pliku, tylko jeśli oryginalny CRC jest znany. – Cheeso

6

DotNetZip, bezpłatna biblioteka open source do obsługi plików zip w językach .NET, obsługuje metodę CheckZip(), która spełnia to, co chcesz. Dostępne są różne poziomy wiarygodności. Podstawowy poziom sprawdza tylko spójność metadanych. Najbardziej kompletny poziom polega na pełnym wyodrębnieniu pliku zip do bitbucketu, aby sprawdzić, czy rzeczywiste skompresowane dane nie są uszkodzone.

1

Aby sprawdzić całe archiwum "na pewno" należy wyodrębnić wszystkie dane (ponieważ CRC, przechowywane w archiwum, jest obliczana na podstawie nieskompresowanych danych), a nawet po tym nie można mieć 100% pewności, że to nie jest uszkodzony (ponieważ CRC jest dobre, ale nie gwarantuje, że dane nie zostały zmienione).

0

Użyj pliku zip -T, aby sprawdzić, czy plik jest uszkodzony. Przykład uszkodzonego pliku wygląda następująco:

zip -T filename.zip 
     zip warning: missing end signature--probably not a zip file (did you 
     zip warning: remember to use binary mode when you transferred it?) 
     zip warning: (if you are trying to read a damaged archive try -F) 

zip error: Zip file structure invalid (filename.zip) 
Powiązane problemy