您现在的位置:首页 >> 硬件系统 >> 硬件系统 >> 内容

Delphi中比较两个文件是否相同

时间:2011/9/3 15:21:55 点击:

  核心提示:function CompareStream(// 比较两个流是否相等mStream1, mStream2: TStream // 两个流): Boolean;// 返回两个流是否相等var vBuf...
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;

作者:王集鹄 来源:转载
共有评论 0相关评论
发表我的评论
  • 大名:
  • 内容:
  • 盒子文章(www.2ccc.com) © 2024 版权所有 All Rights Reserved.
  • 沪ICP备05001939号