2009-10-08 15 views
5

Piszę prosty program, który służy do synchronizowania plików do FTP. Chcę być w stanie sprawdzić, czy lokalna wersja pliku różni się od wersji zdalnej, dzięki czemu mogę stwierdzić, czy plik musi zostać przeniesiony. Mogłem sprawdzić rozmiar pliku, ale nie jest to w 100% wiarygodne, ponieważ oczywiście możliwe jest, aby dwa pliki miały taki sam rozmiar, ale zawierały inne dane. Data/czas modyfikacji plików również nie jest wiarygodna, ponieważ data komputera użytkownika może być źle ustawiona.Jak mogę sprawdzić, czy plik na serwerze FTP jest identyczny z plikiem lokalnym bez pobierania pliku?

Czy istnieje inny sposób sprawdzenia, czy plik lokalny i plik na serwerze FTP są identyczne?

Odpowiedz

5

Nie istnieje ogólny sposób. Jeśli witryna ftp zawiera plik sumy kontrolnej, możesz go pobrać (który będzie o wiele szybszy, ponieważ suma kontrolna jest dość mała), a następnie sprawdź, czy sumy kontrolne są zgodne. Ale oczywiście polega to na właścicielu strony ftp, tworząc plik sum kontrolnych i aktualizując go.

Poza tym jesteś S.O.L.

1

Użyj sumy kontrolnej. Wygenerujesz skrót mieszania md5 (lub sha1, sha2 itd.) Obu plików, a jeśli pliki są identyczne, to skróty będą identyczne.

+3

Jak to działa bez pobierania? –

+0

To działa, jeśli masz kontrolę nad ftp i możesz generować sumy kontrolne za każdym razem, gdy plik zostanie załadowany ... to technicznie nadal jest pobranie, jak sądzę, ale nie jest to pobieranie pliku o dowolnej wielkości. – neminem

2

Jeśli serwer jest zwykłym FTP, nie można zrobić nic lepszego niż sprawdzenie rozmiaru i znaczników czasu.

FTP nie ma mechanizmu przekazywania ci skrótów/sum kontrolnych plików, więc musisz zrobić coś takiego, jak zachować specjalny "plik aukcji", który zawiera wszystkie nazwy plików i hashe, lub wykonać oddzielne żądanie przez HTTP, lub jakiś inny protokół.

Idealnie nie powinieneś używać FTP, to naprawdę przestarzały protokół. Jeśli masz kontrolę nad systemem, możesz użyć rsync lub coś podobnego.

1

IETF próbował osiągnąć to poprzez dodanie nowych poleceń FTP, takich jak MD5 i MMD5.

http://www.faqs.org/rfcs/ftp-rfcs.html

Jednak nie wszyscy producenci FTP wspierać je. Musisz więc sprawdzić docelowy serwer FTP, na którym aplikacja będzie działać, aby sprawdzić, czy obsługuje on MD5/MMD5. Jeśli nie, możesz odebrać obejścia wymienione powyżej.

0

Ilekroć pliki przesłane klienta do serwera FTP, mapa każdy plik do jego hash i przechowywać je lokalnie na komputerze klienckim (lub zapisać go w dowolnym miejscu można uzyskać dostęp później, sprawę Format nie robi, może być to plik XML, zwykły tekst, pod warunkiem, że możesz odzyskać pary klucz/wartość). Następnie, gdy ponownie prześlesz pliki, po prostu sprawdź pliki lokalne za pomocą utworzonej tabeli mieszania, a jeśli jest inna, prześlij plik. W ten sposób nie musisz polegać na serwerze, aby zachować plik sumy kontrolnej i nie musisz mieć uruchomionego procesu monitorowania zdarzeń FileSystemWatcher.

Powiązane problemy