Synchronizacja plików - co porównywać

0

Witam, piszę synchronizator plików i proszę o sugestie. Załóżmy że porównując dwa foldery wybrane przez użytkownika napotkałem na sytuację w której oba foldery zawierają plik o tej samej nazwie, ale wiemy że są to pliki różne(np. jeden jest nowszy). Co polecicie porównywać w tych plikach, aby określić który usunąć, a który zostawić. Rozmiar? Datę utworzenia? Proszę o sugestie.

0

Różny rozmiar mówi tylko tyle że zawartość plików jest (najpewniej) inna. Ten sam rozmiar nie gwarantuje tego że pliki są jednakowe.
Teoretycznie nowsza data utworzenia pliku powinna świadczyć o tym że jest to plik aktualniejszy, ale to też może być tylko życzenie.

Jeśli z punktu biznesowego nie opiszesz dokładniej sytuacji to każda rada może być tu tak samo mądra jak głupia.

0

To ma być synchronizator plików, dowolnych. Chyba faktycznie ciężko będzie zdecydować który plik jest nowszy. Myślę że pozostanę na tym, że domyślnie, plik utworzony później jest nowszy, jednak pozwolę użytkownikowi edytować to, który plik zostawić. Dzięki.

0

System.IO.File.GetLastWriteTime(plik);

0

Tak właśnie zrobiłem, potem gdy writeCzas jest ten sam, sprawdzam rozmiar, na końcu czas utworzenia samego pliku. Dzięki. Jak macie czas to zajrzyjcie tu, proszę: http://4programmers.net/Forum/C_i_.NET/180570-wpf_bindowanie_w_dwie_strony . Ten sam projekt, inny problem.

0

Trzeba wyświetlić użytkownikowi zawartość obu plików z zaznaczeniem zmian i pozwolić mu zdecydować, który zostawić.

0

Podepnę się pod temat kolegi, bo podobny problem posiadam. Również robię synchronizację, tyle że między komputerem lokalnym a serwerem. Zakładam, że pliki mam zsynchronizowane. Mogę mieć 2 klientów PC, i z pierwszego skasować plik - wtedy zostanie również usunięty z serwera. Później uruchamiam drugiego klienta, i skąd ten klient ma wiedzieć czy skasować plik z folderu lokalnego, czy przesłać go na serwer? Macie jakieś pomysły?

1

Server musie mieć mape plików/katalogów i jak skasuje coś to musi mieć wpis w dzienniku o takiej akcji na o ID 666 kiedy klient się łączy to pobiera sobie taki dziennik i pacza ostatnie ID jakie miał przetworzone to np 555 a z dziennika serverowego jest ID 666 więc wykonuje to ~100 kroków z dziennika. Do tego dochodzą optymalizacje np po co update robić jednego pliku 60 razy jak wystarczy zrobić ten ostatni update i po to masz mape by zobaczyć ostatnie modyfikacje pliku etc.

0

proponuje użyć git-a zamiast pisać coś takiego od nowa, a jak nie chcesz pisać od nowa to proponuje użyć git-a, żeby wiedzieć jak on się w takiej sytuacji zachowuje.

0

Uzyc gotowego rozwiazania wlasnie jak rsync albo porownywac wartosc funkcji skrotu wyliczona dla zawartosci obu plikow, jak rozna, to wymaga synchronizacji.

1 użytkowników online, w tym zalogowanych: 0, gości: 1