比较两个文件是否相同(比较两个流是否相等)

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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要判断两个JSON文件的节点是否相等,可以使用以下步骤: 1. 将两个JSON文件加载为Python对象,可以使用json模块的load方法将JSON文件转换为Python字典或列表。 2. 逐个比较两个对象的每个键值对,判断它们是否相等。如果值是嵌套的字典或列表,则递归进行比较。 3. 如果两个对象完全相等,则它们的JSON表示应该相同。可以使用dumps方法将Python对象转换为JSON字符串,然后比较两个字符串是否相等。 示例代码: ```python import json def compare_json_files(file1, file2): with open(file1) as f: data1 = json.load(f) with open(file2) as f: data2 = json.load(f) if type(data1) != type(data2): return False if isinstance(data1, list): if len(data1) != len(data2): return False for i in range(len(data1)): if not compare_json_files(data1[i], data2[i]): return False return True if isinstance(data1, dict): if set(data1.keys()) != set(data2.keys()): return False for key in data1.keys(): if not compare_json_files(data1[key], data2[key]): return False return True return data1 == data2 def is_json_equal(file1, file2): with open(file1) as f1, open(file2) as f2: return json.dumps(json.load(f1)) == json.dumps(json.load(f2)) file1 = "file1.json" file2 = "file2.json" if compare_json_files(file1, file2): print("JSON files are equal") else: print("JSON files are not equal") if is_json_equal(file1, file2): print("JSON files are equal") else: print("JSON files are not equal") ``` 这个函数将比较两个JSON文件并返回一个布尔值,表示它们是否相等。第一个函数使用递归比较两个Python对象的键值对,第二个函数使用dumps方法比较它们的JSON表示。如果两个函数都返回True,则这两个JSON文件相等的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值