zoukankan      html  css  js  c++  java
  • 比较两个文件是否相同(比较两个流是否相等)

    function CompareStream(// 比较两个流是否相等
      mStream1, mStream2: TStream // 两个流
    ): Boolean;// 返回两个流是否相等
    var
      vBuffer1, vBuffer2: array[0..$1000-1of 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)>0and (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;

    http://blog.csdn.net/zswang/article/details/1807693

  • 相关阅读:
    BZOJ 1529 [POI2005]ska Piggy banks:并查集
    BZOJ 1370 [Baltic2003]Gang团伙:并查集【虚点】
    BZOJ 3624 [Apio2008]免费道路:并查集 + 生成树 + 贪心【恰有k条特殊路径】
    BZOJ 1660 [Usaco2006 Nov]Bad Hair Day 乱发节:单调栈
    BZOJ 2019 [Usaco2009 Nov]找工作:spfa【最长路】【判正环】
    BZOJ 1638 [Usaco2007 Mar]Cow Traffic 奶牛交通:记忆化搜索【图中边的经过次数】
    BZOJ 1641 [Usaco2007 Nov]Cow Hurdles 奶牛跨栏:新版floyd【路径上最大边最小】
    BZOJ 1673 [Usaco2005 Dec]Scales 天平:dfs 启发式搜索 A*搜索
    POJ2226-Muddy Fields-二分图*
    POJ2186-Tarjan-kosaraju-缩点
  • 原文地址:https://www.cnblogs.com/findumars/p/6347917.html
Copyright © 2011-2022 走看看