-
11. Data: 2012-02-12 12:13:25
Temat: Re: zadanie
Od: Arkadiusz Dymek <a...@n...bedzie>
W dniu 2/12/2012 10:56 AM, f...@g...SKASUJ-TO.pl wrote:
> zdaje mi sie ze nie nalezy tu hashowac (nie znam sie zreszta na
> hashowaniu)
>
Bez hashowania będzie ciężko - musiałbyś porównywać pliki metodą każdy z
każdym, a tak tworzysz tablicę hashów i na koniec porównujesz tylko dla
pewności te, dla których hashe są takie same.
Pozdrawiam,
Arkadesh
-
12. Data: 2012-02-12 12:20:36
Temat: Re: zadanie
Od: bartekltg <b...@g...com>
W dniu 2012-02-12 11:43, Andrzej Jarzabek pisze:
> Na dzień dobry bez czytania pliku jest przecież dostępna długość.
>
> I teraz tak: mając długość pliku, można opracować algorytm biorący
> ileśtam bajtów (powiedzmy maksymalnie 512) z określonej pozycji w środku
> pliku i robić hash z nich.
>
> Dodatkowy bonus jest taki, że można zapisać długość w tablicy i
> porównywać ją przed binarnym porównaniem całych plików.
Podsumowując.
Do każdego pliku dowiązujemy krotkę:
{ długość, hash paru losowych fragmentów(, hash większego fragmentu),
hash całosći, (inny hash całosći) }
Sortujemy leksykograficznie po tych krotkach*), obliczając kolejne
wartości krotki leniwie.
:-)
*)być może w przypadku równości krotek porównujemy pliki.
pzdr
bartekltg
-
13. Data: 2012-02-13 07:09:45
Temat: Re: zadanie
Od: s <f...@f...com>
Program dupless, pc magazine, c win api, source.
-
14. Data: 2012-02-13 14:00:32
Temat: Re: zadanie
Od: "slawek" <h...@s...pl>
Użytkownik napisał w wiadomości grup
dyskusyjnych:jh6dp3$km6$...@i...gazeta.pl...
>ktos umialby napisac prostego toola, program
>ktory dla podanego katalogu i podanego rozszerzenia plikow
>wyszukalby pliki ktore maja binarne duplikaty i duplikaty
>te przerenamowal np na koncu dodajac ciag np ".duplicate"
Swego czasu był opublikowany program (tekst źródłowy w C, okienka MS w
czystym API) o dźwięcznej nazwie "dupless".
Algorytm był do wyboru: albo porównywanie nazw plików, albo długości (i ew.
zawartości, daty). Program był "prościutki", ale nie pozwalał sam w sobie na
masowe rename czy delete itp. - choć można wyeksportować listę duplikatów. Z
lenistwa polecam gawk do przetworzenia takiej listy - i sprawa rozwiązana.
W sensie teoretycznym: co oznacza, że dwa pliki są jednakowe? Mają taką samą
zawartość? Ale muszą mieć różne nazwy (tzn. przynajmniej inna ścieżka)...
inaczej nie mówilibyśmy o dwóch plikach. Ale pliki o tej samej zawartości
mogą mieć znaczenie (dla systemu, dla kogoś), np. ktoś może wstawiać do
katalogów plik "audit_ok.txt" o długości zero bajtów... Z drugiej strony dwa
pliki, np. file1.c i file2.c mogą mieć różną zawartość w sensie np. CRLF vs.
LF - ale i tak będzie to "ten sam" kod źródłowy (czyli co? różne czy takie
same?)
W sensie praktycznym - wystarczy sprawdzać długość pliku (pliki o różnych
długościach są różne, te mające 0 bajtów są wszystkie jednakowe), potem
jeżeli długości są takie same to sprawdzać pierwsze n bajtów (tanie, nie
zajmuje wiele czasu), potem liczyć sumę kontrolną (CRC, MD5 do wyboru, pliki
z różnym MD5 są różne i rzadko kiedy, bardzo rzadko, będzie potrzebne
dokładniejsze sprawdzenie, a MD5 ma koszt liniowy)... jeżeli to zawiedzie
sprawdzać bajt po bajcie zgodność (przy m bajtach i k plikach koszt m*k,
ewentualnie można od końca czy jakoś losowo).
slawek
-
15. Data: 2012-02-13 17:29:14
Temat: Re: zadanie
Od: Michoo <m...@v...pl>
W dniu 12.02.2012 10:56, f...@g...SKASUJ-TO.pl pisze:
> zdaje mi sie ze nie nalezy tu hashowac (nie znam sie zreszta na
> hashowaniu)
zdaje mi się, że (należy/nie należy) X (nie znam się na X)
Mam dziwne wrażenie, że każdy post na blog^R^Rgrupie opatrujesz czymś takim.
>
> kwestia jest tu inna: co sie wiaze z jakimi kosztami,
Sprawdź zamiast bredzić.
--
Pozdrawiam
Michoo