我要检查文件是否具有有效的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的缓存可能会有一些好处,但是我希望它会非常有限。