两个RAR文件的数据对比和拷贝问题!!!! ( 积分: 300 )

  • 主题发起人 主题发起人 the19hells
  • 开始时间 开始时间
T

the19hells

Unregistered / Unconfirmed
GUEST, unregistred user!
各位大富翁们,我现在遇到了一个这样的问题:用eMule从网上Downlord了两个一样的RAR文件,但是因为发布源不同,所以两个都没有完成,但都在95%以上,从eMule的完成分析来看,好像他们未下载完成的数据也不是重复的,我现在想编一个程序自动比较两个文件,根据内容生成另一个文件:如果两个文件数据都为“00”则把数据读过来,如果一个是“00”,另一个不是,则把不是的“00”的数据读过来,全部比较完毕后把这个新文件单独存起来,两个文件都比较大640M,我先出300分,如果觉得不够还可以加,请问有没有做好的,我现在急着用,不想自己编了。先谢谢了!
 
用中华压缩试试,可以修复RAR
修复后看那些文件不重复
 
To 我爱PASCAL
这两个RAR只有一个文件,而且是分卷压缩中的一部分,没办法解压。
 
听听……
 
哪就不知了
 
这种方法应该搞不定, 不如重新下载
 
就是因为两个文件都下载完成不了 我才出此下策的。
 
看来没有人回答,我自己写了个程序,如下:
procedure TForm1.SpeedButton4Click(Sender: TObject);
var
F1, F2, F3: TFileStream;
I, R, Buff_Count: Integer;
Buff1, Buff2, Buff3: array[0..1023] of char;
TMP_C1, TMP_C2 : char ;
begin

F1 := TFileStream.Create(Edit1.Text , fmOpenRead);
F2 := TFileStream.Create(Edit2.Text , fmOpenRead);

{if F1.Size <> F2.Size then
begin
Beep ;
exit ;
end;
}
try
F3 := TFileStream.Create('E:/My do
cuments/Delphi程序/二进制文件比较/T3.rar', fmCreate);
try
while F1.Position < F1.Size do
begin
R := F1.Read(Buff1, SizeOf(Buff1));
R := F2.Read(Buff2, SizeOf(Buff1));
if R > 0 then
begin
Buff_Count := R div SizeOf(Byte) - 1 ;
for I := 0 to Buff_Count do
begin
TMP_C1 := Buff1 ;
TMP_C2 := Buff2 ;
//if TMP_C1 = TMP_C2 then
Buff3 := Buff1 else
if TMP_C1 <> #0 then
Buff3 := Buff1 else
Buff3 := Buff2 ;
end;

F3.Write(Buff1, R);
end;

end;
finally
FreeAndNil(F3);
end;

finally
FreeAndNil(F1);
FreeAndNil(F2);
end;

end;

运行时,出现下列问题:
如果两个文件的差别如下:
52 61 72 21 1A 00
00 00 00 00 1A 07
程序可以找出数据,合成真正的
52 61 72 21 1A 07,文件正常,可是如果差别如下:
52 61 72 21 1A 00
00 01 02 00 1A 07
怎么读取都是61和1比较,而出现不了6和0比较,1和1比较,请赐教!
 
有疑点我提醒你,你怎么就知道00就不是有效的数据,emule的文件结构你清楚么
 
你这样的合并是毫无意义而且无法奏效的。首先,RAR格式有自己的定义,有自己的头定义以及每个文件体的头定义。同时每个压缩文件都会记录下文件的CRC校验值。你就算能把两个RAR不同的地方合并了,也无法保证两个RAR中每个文件所属块的头定义匹配,等解压的时候仍然解压不出来的。
 
后退
顶部