Delphi中比较两个文件是否相同时间:2011-6-2来源:yang 作者: peng点击: 232次
function CompareStream(// 比较两个流是否相等
mStream1, mStream2: TStream // 两个流 ): Boolean;// 返回两个流是否相等 var vBuffer1, vBuffer2: array[0..$1000-1] of Char; vLength1, vLength2: Integer; begin Result := mStream1 = mStream2; if Result then Exit; if not Assigned(mStream1) or not Assigned(mStream2) then Exit;// 其中一个为空 while True do begin vLength1 := mStream1.Read(vBuffer1, SizeOf(vBuffer1)); vLength2 := mStream2.Read(vBuffer2, SizeOf(vBuffer2)); if vLength1 <> vLength2 then Exit; if vLength1 =0 then Break; if not CompareMem(@vBuffer1[0],@vBuffer2[0], vLength1) then Exit; end; Result := True; end;{ CompareStream } function CompareFile(// 比较两个文件是否相等 mFileName1, mFileName2: string // 两个文件 ): Boolean;// 返回两个文件是否相等 var vFileHandle1, vFileHandle2: THandle; vFileStream1, vFileStream2: TFileStream; vShortPath1, vShortPath2: array[0..MAX_PATH] of Char; begin Result := False; if not FileExists(mFileName1) or not FileExists(mFileName2) then Exit;// 其中一个文件不存在 GetShortPathName(PChar(mFileName1), vShortPath1, SizeOf(vShortPath1)); GetShortPathName(PChar(mFileName2), vShortPath2, SizeOf(vShortPath2)); Result := SameText(vShortPath1, vShortPath2);// 两个文件名是否相同 if Result then Exit; vFileHandle1 := _lopen(PChar(mFileName1), OF_READ or OF_SHARE_DENY_NONE); vFileHandle2 := _lopen(PChar(mFileName2), OF_READ or OF_SHARE_DENY_NONE); Result :=(Integer(vFileHandle1)>0) and (Integer(vFileHandle2)>0);// 文件是否可以访问 if not Result then begin _lclose(vFileHandle1); _lclose(vFileHandle2); Exit; end; Result := GetFileSize(vFileHandle1, nil)= GetFileSize(vFileHandle2, nil);// 文件大小是否一致 if not Result then begin _lclose(vFileHandle1); _lclose(vFileHandle2); Exit; end; vFileStream1 := TFileStream.Create(vFileHandle1); vFileStream2 := TFileStream.Create(vFileHandle2); try Result := CompareStream(vFileStream1, vFileStream2);// 比较两个文件内容是否相同 finally vFileStream1.Free; vFileStream2.Free; end; end;{ CompareFile } procedure TForm1.FormCreate(Sender: TObject); begin Caption := BoolToStr( CompareFile(‘c:\temp\temp1.txt‘,‘c:\temp\temp2.txt‘), True); end; |
|