我需要一个e方法,将两个文件的内容比较在一起,文件可以是BMP,JPEG,PNG,TIF我尝试了这个
procedure TForm1.Button1Click(Sender: TObject);
var
f1, f2 : TFileStream;
Bytes1: TBytes;
Bytes2: TBytes;
i: integer;
s: booleAN;
begin
f1 := TFileStream.Create('C:OutputLayout 1.JPG' , fmOpenRead);
f2 := TFileStream.Create('C:DataLayout 1.JPG' , fmOpenRead );
if f1.Size <> f2.Size then
begin
ShowMessage('size');
exit;
end;
SetLength(Bytes1, f1.Size);
f1.Read(Bytes1[0], f1.Size);
SetLength(Bytes2, f2.Size);
f2.Read(Bytes2[0], f2.Size);
s:= true;
for I := 1 to length(Bytes1) do
begin
if Bytes1[i] <> Bytes2[i] then
begin
s := false;
Exit;
end;
end;
if s then
ShowMessage('same');
end;
但这对我来说不正常,我的文件在内容中都相同,但是它们的大小在2个字节中有所不同。
一个文件之一是我必须给用户另一个文件是用户打开同一文件并制作副本的文件,所以为什么它们是2个字节,我不知道,但是应该离开以比较这些文件的内容
代码有一个错误。动态阵列基于零,因此循环应为:
for I := 0 to high(Bytes1) do
代码效率非常低。它不应一次读取所有内容。您应该使用CompareMem
比较内存块。
您说文件的大小不同,但是您希望它们比较相等。好吧,那没有道理。您的代码明确检查大小是否匹配。
打开和读取JPEG文件将修改内容,因为JPEG是一种有损的压缩算法。
您的主题建议您要比较PowerPoint文件,但这些文件实际上是JPEG图像。
如果要比较JPEG,则可能需要包括一个范围,例如
Const
DELTA = 2 ;
if (Bytes1[i] - Bytes2[i] > DELTA) OR (Bytes1[i] - Bytes2[i] < -DELTA) then