Delphi - 读取文件签名并进行比较

Delphi - Reading a file signature and compare them

我在 delphi 方面需要一点帮助。我在很多地方都进行了搜索,但找不到我的问题的答案。

我如何读取文件签名(在我的例子中是 4 个字节)并将十六进制值放入字符串中?我的程序必须识别的签名是 $4E4553A1。

我需要测试文件,例如。 C:\Happy.bin。有这个签名。为了避免人们在我的软件中放入错误格式的文件。签名是其中的前 4 个字节。

非常感谢,英语不是我的第一语言,对于错误,我们深表歉意。爱你们所有人

这可能是最简单的。你调用它并传入文件名。

function CheckSignature(aFilename: string): Boolean;
var
  signature: UInt32;
  myFile: TFileStream;
begin
  myFile := TFileStream.Create(aFilename, fmOpenRead or fmShareDenyWrite);
  try
    if myFile.Read(signature, SizeOf(signature)) = SizeOf(signature) then
      Result := (signature = $A153454E)
    else
      Result := False;
  finally
    myFile.Free;
  end;
end;

由于整数存储其数据的方式(小端),签名被反转。

要使用此函数,您可以这样调用它:

begin
  if CheckSignature('C:\Happy.bin') then
    ShowMessage('Matched')
  else
    ShowMessage('Didn''t match');
end;