我要检查文件是否具有有效的IMAGE_DOS_SIGNATURE(MZ)

function isMZ(FileName : String) : boolean;
var
 Signature: Word;
 fexe: TFileStream;
begin
result:=false;
try
  fexe := TFileStream.Create(FileName, fmOpenRead or fmShareDenyNone);
  fexe.ReadBuffer(Signature, SizeOf(Signature));
  if Signature = $5A4D { 'MZ' } then
  result:=true;
finally
fexe.free;
end;
end;


我知道我可以在Windows单元中使用一些代码来检查IMAGE_DOS_SIGNATURE。问题是我需要最快的方法来检查IMAGE_DOS_SIGNATURE(用于大文件)。我需要您对我的代码或新代码的一些建议吗?

谢谢

最佳答案

文件的大小无关紧要,因为您的代码仅读取前两个字节。

与分配和使用TFileStream的任何开销(在到达Win32 SysUtils.FileRead之前都要经过ReadFile)相比,在唯一重要的情况下,即寻求解决方案的成本,它几乎是无形的噪音扫描数百个可执行文件。

通过使用原始WinAPI调整Windows的缓存可能会有一些好处,但是我希望它会非常有限。

09-13 10:20