Поиск файла по контрольной сумме (хэшу) - Free Pascal
Формулировка задачи:
нужно написать программу, которая ищет файл по хэшу, использовать алгоритм CRC32
нам известен хэш файла, который нужно найти в папке среди других файлов
никак не могу найти алгоритм на паскале, кто знает?
Решение задачи: «Поиск файла по контрольной сумме (хэшу)»
textual
Листинг программы
- {$mode Delphi}
- Uses DOS,crc;
- var
- scanF: file of byte;
- block:byte;
- s:searchRec;
- CurDir,path,mask:string;
- hash:LongWord;
- z:integer;
- function GetCRC(s : string) : cardinal;
- var
- bufer:array[0 .. 8191] of byte;
- len : integer;
- f : file;
- IO:byte;
- begin
- assign(f, s);
- {$I-} filemode:=0;reset(f,1); {$I+}
- IO := IOresult;
- if IO=0 then
- begin
- result := crc32(0, nil, 0);
- repeat
- BlockRead(F, bufer, Sizeof(bufer), len);
- result:= crc32(result, @bufer, len);
- until len = 0;
- close(f);
- end;
- GetCRC:=result;
- end;
- Procedure FileFind(Dir,FindName : PathStr);
- Procedure SearchDir(Dir : PathStr);
- Var
- SRec:SearchRec;
- begin
- if Dir[Length(Dir)] <> '\' then Dir := Dir+'\';
- FindFirst(Dir + FindName, AnyFile, SRec);
- While DosError = 0 do
- begin
- With SRec do
- if Attr and (VolumeID + Directory) = 0 then
- if GetCRC(Dir + Name)=hash then
- writeln (Dir + Name,' - CRC match found!!!');
- FindNext(SRec);
- end;
- FindFirst(Dir+'*.*', Directory or ReadOnly or Hidden or SysFile, SRec);
- While DosError = 0 do
- begin
- With SRec do
- if (Attr and Directory <> 0) and (Name[1] <> '.') then
- SearchDir(Dir+Name);
- FindNext(SRec);
- end;
- end;
- begin
- SearchDir(Dir);
- end;
- begin
- repeat
- writeln('1) Take CRC from file',#10,#13,'2) CRC search',#10,#13,'0) exit');
- readln(z);
- case z of
- 1:begin
- writeln('Enter full path with filename');
- readln(path);
- hash:=GetCRC(path);
- writeln(hash);
- end;
- 2:begin
- writeln('Enter full path ');
- readln(path);
- writeln('Enter mask or filemame with extention ');
- readln(mask);
- FileFind(path,mask);
- end;
- end;
- until z=0;
- end.
Объяснение кода листинга программы
1) Ввод с клавиатуры номера пункта меню: 2) Ввод полного пути файла для вычисления контрольной суммы (хэша): 3) Вычисление контрольной суммы (хэша) файла: 4) Вывод результата вычисления контрольной суммы (хэша): 5) Ввод полного пути для поиска файла: 6) Ввод маски или имени файла с расширением для поиска: 7) Поиск файла по маске или имени файла с расширением: 8) Вывод результатов поиска, включая совпадения и полный путь к найденным файлам.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д