Otwieranie / wczytywanie do pamięci wielu plików c++

Odpowiedz Nowy wątek
2011-07-19 01:09
Gumish
0

Sprawa wygląda tak:
Piszę program którego zadaniem jest znalezienie i usunięcie takich samych plików z folderu
Ma on po prostu otworzyć pierwszy plik - porównać go z każdym innym w folderze (i jeśli jakiś będzie taki sam usunąć dubla) następnie zamknąć plik, otworzyć drugi itd.
Samo porównywanie i usuwanie mam już napisane. Schody zaczęły się w chwili gdy zacząłem się zastanawiać jak go zmusić ,żeby otwierał pliki po kolei i porównywał z każdym - totalnie nie mam pojęcia jak się do tego zabrać i byłbym wdzięczny za wszelkie porady :)
I jeszcze pytanie dodatkowe - w czym lepiej to pisać w Devie czy w Borlandzie bo takie mam dwie opcje?

edytowany 1x, ostatnio: madmike, 2016-12-13 18:26
"I jeszcze pytanie dodatkowe - w czym lepiej to pisać w Devie czy w Borlandzie bo takie mam dwie opcje?" - za niedługo się dowiesz o trzeciej ;) - Sarrus 2011-07-19 07:49
Mieć internet i tylko dwie możliwości? uuuuu..... - O_o 2011-07-20 14:54

Pozostało 580 znaków

2011-07-19 08:54
0

Rozumiem, że piszesz to pod Windowsa, jeśli tak, to mogą Ci się przydać takie funkcje z WinAPI jak FindFirstFile, FindNextFile.

Pozostało 580 znaków

2011-07-19 12:11
0

Bardzo nie optymalne ale najprostsze rozwiązanie to:

  1. wylistować wszystkie pliki i zapisać do jakieś tablicy
  2. dla każdego pliku zapisanego w tablicy wykonujesz listowanie plików i porównywanie

Pozostało 580 znaków

2011-07-20 00:58
0

gdybym wiedzial jak zrobic listowanie to w sumie nie ma problemu - majac tablice z wszystkimi plikami praktycznie jestem w domu....

Pozostało 580 znaków

2011-07-20 02:15
0

Mrowa Ci już napisał: FindFirstFile, FindNextFile. Najpierw używasz FindFirstFile, potem w pętli FindNextFile i wyniki dopisujesz np. do jakiegoś wektora -> masz listę wszystkich plików/katalogów


Pozostało 580 znaków

2011-07-20 13:40
Kumashiro
0
Gumish napisał(a)

Piszę program którego zadaniem jest znalezienie i usunięcie takich samych plików z folderu
Ma on po prostu otworzyć pierwszy plik - porównać go z każdym innym w folderze (i jeśli jakiś będzie taki sam usunąć dubla) następnie zamknąć plik, otworzyć drugi itd.
Samo porównywanie i usuwanie mam już napisane.

Z tytułu wnoszę, że ładujesz te pliki do pamięci i je porównujesz. W Twoim przypadku zawartość plików nie ma znaczenia i liczy się tylko to, czy pliki są identyczne. W takim razie nie ma potrzeby wczytywać ich do pamięci (a tym bardziej wszystkich). Wystarczy jeśli będziesz porównywał skróty (MD5, SHA1/256) ich zawartości, a to możesz zrobić strumieniowo. Np:

  1. wylicz skrót dla pliku wzorcowego i go zapamiętaj,
  2. wylicz skrót dla kolejnego pliku
  3. porównaj skrót pliku wzorcowego ze skrótem pliku porównywanego i jeśli są takie same, to znaczy że pliki mają identyczną zawartość
  4. jeśli są jakieś pliki do przetworzenia, GOTO 2
Żeby być ścisłym: to, że hashe są identyczne, nie implikuje, że pliki są identyczne, tylko że jeśli hashe są różne, to pliki są na pewno różne. Przy takich samych hashach należałoby zrobić rzeczywiste porównanie. - rincewind 2011-07-21 17:05

Pozostało 580 znaków

2011-07-20 17:24
0

Może warto najpierw wczytać listę plików wraz z ich rozmiarami, po czym posortować wg rozmiarów, a jakiekolwiek porównywania robić tylko dla plików o identycznych rozmiarach.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
Mnie się ten pomysł podoba :) - Kumashiro 2011-07-20 18:01

Pozostało 580 znaków

2011-07-28 15:53
Cplus
0

Jak napisano wcześniej:

  • wczytać nazwy plików i ich rozmiary
  • porównać rozmiary plików
  • dla reszty: porównać pierwsze k bajtów plików
  • dla reszty: porównać ostatnie k bajtów plików
  • dla reszty: porównać skrót (CRC32)
  • dla reszty: porównać całą zawartość pliku (gdy skrót jest taki sam)
Wydział Archeologii to na lewo... - Kumashiro 2011-07-28 16:06
CRC32? Wut? Niech użyje SHA512 i ryzyko kolizji będzie na tyle małe, że można po samych haszach stwierdzić z dość dużym prawdopodobieństwem (sądzę, że wystarczającym), że pliki są takie same lub różne. - hauleth 2011-07-28 17:15

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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