比较两个文件是否相同

原创 2007年09月30日 11:00:00
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;

比较两个目录下的文件是否相同

  • 2012年01月16日 10:10
  • 470B
  • 下载

java快速比较两个文件是否相同

像百度网盘有秒传的功能,其实他的原理主要是比较需要上传的文件和网盘中的文件是否一样,如果不一样则上传,如果一样就没必要上传文件,只是将网盘中的文件指向你的用户名即可,从而实现了秒传。 通过计算文件的M...

Java课程设计 比较两个文件内容是否相同

运行前提:保存三个文本文件“text1.txt”、“text2.txt”、“text3.txt”到存放“IOOperation.java”的同一个文件夹中。其中两个文本文件内容相同,一个不同于其他两个...

java 比较两个文件是否相同

采用的策略:1)先比较两个文件的长度,如果不一样则文件肯定不一样                          2)如果文件一样长则将文件读取出来一个字节一个字节的比较他们的内容是否相同 代码...

java使用计算md5校验码方式比较两个文件是否相同

public class MD5Check {   /**   * 默认的密码字符串组合,用来将字节转换成 16 进制表示的字符,apache校验下载的文件的正确性用的就是默认的这个组合   *...

MD5比较两个DataSet是否完全相同

  • 2010年07月09日 14:37
  • 1KB
  • 下载

比较两个数组元素是否相同

  • 2013年10月06日 04:30
  • 1KB
  • 下载

比较两个java.util.Date 的日期(年月日)是否相同(忽略时、分、秒)的多种方法

介绍几种比较Date年月日的方法 1、需求: 1)下面两个时间进行比较: Thu Jan 01 08:59:00 CST 1970 Thu Jan 01 08:48:00 CST 1970...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:比较两个文件是否相同
举报原因:
原因补充:

(最多只允许输入30个字)