我目前正在尝试重写 Binary Diff 以支持更大的文件,因为GetMem
用于读取文件会限制文件大小(我想)并且我无法读取 2 个每个大小为 900 MB 的文件。
所以我想,我可以使用VirtualAlloc
,遗憾的是还没有那么好。从外观上看,第一个文件的分配工作正常 - 一旦我尝试为第二个文件分配内存,它就会返回一个空指针。不得不说我对分配内存还很陌生,所以如果我监督了一个已经回答了这个问题的线程,请原谅我(过去 4 小时我在互联网上搜索了一个解决方案)。
好吧,代码如下:
procedure TFileData.LoadFile;
var
FileHandle: Integer;
BytesRead: Integer;
dataPoint : Pointer;
begin
FileHandle := FileOpen(fName, fmOpenRead or fmShareDenyWrite);
try
if FileHandle = -1 then
Error('Cannot open file %s', [fName]);
fSize := GetFileSize(FileHandle, nil);
if fSize = Cardinal(-1) then
Error('Cannot find size of file %s - may be to large', [fName]);
if fSize = 0 then
Error('File %s is empty', [fName]);
try
dataPoint := VirtualAlloc(nil,fSize,MEM_COMMIT,PAGE_READWRITE);
fData := dataPoint;
BytesRead := FileRead(FileHandle, fData^, fSize);
if BytesRead = -1 then
Error('Cannot read from file %s', [fName]);
if fSize <> Cardinal(BytesRead) then
Error('Error reading from file %s', [fName]);
except
if Assigned(fData) then
FreeMem(fData, fSize);
raise;
end;
finally
if FileHandle <> -1 then
FileClose(FileHandle);
end;
end;
归根结底,我想使用该程序来比较两个任意大小的二进制非文本文件,并从中创建一个 Binary Diff。