Sunday, August 06, 2006

procedure CalcCRC32(FileName: String; var CRC32: dword);
var F: file;
BytesRead: dword;
Buffer: Array[1..65521] of byte;
i: Word;
begin
FileMode := 0;
CRC32 := $ffffffff;
{$I-}
AssignFile(F, FileName); Reset(F, 1);
if IOResult = 0 then begin
repeat
BlockRead(F, Buffer, SizeOf(Buffer), BytesRead);
for i := 1 to BytesRead do CRC32 := (CRC32 shr 8) xor Table[Buffer[i] xor (CRC32 and $000000FF)];
until BytesRead = 0;
end;
CloseFile(F);
{$I+}
CRC32 := not CRC32;
end;


procedure TForm1.Button1Click(Sender: TObject);
var
crc :dword;
begin
CalcCRC32('c:\VasSoubor.exe', crc);
if crc<>0 then ShowMessage(IntToHex(crc,6));
end;