当前位置:   article > 正文

比较两个文件是否相同(比较两个流是否相等)_js file.raw

js file.raw
  1. function CompareStream(// 比较两个流是否相等
  2. mStream1, mStream2: TStream // 两个流
  3. ): Boolean;// 返回两个流是否相等
  4. var
  5. vBuffer1, vBuffer2: array[0..$1000-1] of Char;
  6. vLength1, vLength2: Integer;
  7. begin
  8. Result := mStream1 = mStream2;
  9. if Result then Exit;
  10. if not Assigned(mStream1) or not Assigned(mStream2) then Exit;// 其中一个为空
  11. while True do
  12. begin
  13. vLength1 := mStream1.Read(vBuffer1, SizeOf(vBuffer1));
  14. vLength2 := mStream2.Read(vBuffer2, SizeOf(vBuffer2));
  15. if vLength1 <> vLength2 then Exit;
  16. if vLength1 =0 then Break;
  17. if not CompareMem(@vBuffer1[0],@vBuffer2[0], vLength1) then Exit;
  18. end;
  19. Result := True;
  20. end;{ CompareStream }
  21. function CompareFile(// 比较两个文件是否相等
  22. mFileName1, mFileName2: string // 两个文件
  23. ): Boolean;// 返回两个文件是否相等
  24. var
  25. vFileHandle1, vFileHandle2: THandle;
  26. vFileStream1, vFileStream2: TFileStream;
  27. vShortPath1, vShortPath2: array[0..MAX_PATH] of Char;
  28. begin
  29. Result := False;
  30. if not FileExists(mFileName1) or not FileExists(mFileName2) then Exit;// 其中一个文件不存在
  31. GetShortPathName(PChar(mFileName1), vShortPath1, SizeOf(vShortPath1));
  32. GetShortPathName(PChar(mFileName2), vShortPath2, SizeOf(vShortPath2));
  33. Result := SameText(vShortPath1, vShortPath2);// 两个文件名是否相同
  34. if Result then Exit;
  35. vFileHandle1 := _lopen(PChar(mFileName1), OF_READ or OF_SHARE_DENY_NONE);
  36. vFileHandle2 := _lopen(PChar(mFileName2), OF_READ or OF_SHARE_DENY_NONE);
  37. Result :=(Integer(vFileHandle1)>0) and (Integer(vFileHandle2)>0);// 文件是否可以访问
  38. if not Result then
  39. begin
  40. _lclose(vFileHandle1);
  41. _lclose(vFileHandle2);
  42. Exit;
  43. end;
  44. Result := GetFileSize(vFileHandle1, nil)= GetFileSize(vFileHandle2, nil);// 文件大小是否一致
  45. if not Result then
  46. begin
  47. _lclose(vFileHandle1);
  48. _lclose(vFileHandle2);
  49. Exit;
  50. end;
  51. vFileStream1 := TFileStream.Create(vFileHandle1);
  52. vFileStream2 := TFileStream.Create(vFileHandle2);
  53. try
  54. Result := CompareStream(vFileStream1, vFileStream2);// 比较两个文件内容是否相同
  55. finally
  56. vFileStream1.Free;
  57. vFileStream2.Free;
  58. end;
  59. end;{ CompareFile }
  60. procedure TForm1.FormCreate(Sender: TObject);
  61. begin
  62. Caption := BoolToStr(
  63. CompareFile('c:/temp/temp1.txt','c:/temp/temp2.txt'), True);
  64. end;

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/871650
推荐阅读
相关标签
  

闽ICP备14008679号