Поиск файла по контрольной сумме (хэшу) - 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) Вывод результатов поиска, включая совпадения и полный путь к найденным файлам.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д