确定两个rar文件是否属于同一组

时间:2013-12-17 08:01:20

标签: rar winrar

假设我有两个文件,(名称)。n。rar和(名称)。n+1。rar,它们似乎是同一组的一部分(相同大小等)。有没有简单的方法来判断他们是否实际同一组的一部分,而没有先下载全套?目前我唯一可以判断的方法是下载每个文件的实例,然后查看当我尝试打开它时WinRAR是否给我一个错误。

(并且在相关的说明中,假设有这样的方法,我可以在没有相邻部分的情况下做同样的事情吗?)

理想情况下,现有程序可以执行此操作,但如有必要,我可以编写自己的代码。

附加说明:这是同一档案的两套档案。它们看起来与明显的检查相同:文件名是后续的,内容是合理的,大小是相同的,相同数量的部分。然后我收到一整套文件。如果它们不是来自同一组,我就不能解开它们 - 虽然看起来WinRAR会在给我CRC错误(文件损坏)之前进行100%。

2 个答案:

答案 0 :(得分:1)

我不太熟悉RAR格式,但如果您决定用Java编写程序,我建议使用7-Zip-JBinding。

您可以下载存档的前n + 1个部分,然后调用extract()方法忽略仅关注

的输出数据
IArchiveExtractCallback.setOperationResult(ExtractOperationResult) 

调用(检查CRC是否正常)和监视文件是否已打开

IArchiveOpenVolumeCallback.getStream(java.lang.String)

如果请求卷n + 2,则可以断定卷n + 1是正确的卷。 (我不是100%肯定这个结论,但我会尝试一下)

答案 1 :(得分:1)

新答案

所有测试均使用 WinRAR 5.01 32位进行。由于algorythm应保持不变,因此以下语句应对任何其他先前版本有效。如果您知道这不是真的,请随意发表评论。

我将简要介绍一下聊天情况。我试着多次打包大于1GB的文件;然后我混淆了文件并试图提取档案:它有效。问题不在于文件的大小。

我想到了问题的三种可能解决方案:

  1. 架构在包装过程中流入:所以不同的人试图打包文件,混合它们会导致错误;
  2. 不同的人试图打包文件,给出一个略有不同的文件大小(例如250 MB和250000 KB)。但是,在文件属性中会注意到这一点;
  3. 下载过程中文件已损坏:重新下载文件会确认此假设。
  4. 我对第一个问题最感兴趣:架构能否在包装过程中流入?

    我发现答案是,确实如此。以下是重复实验的段落:

    1. 将您的文件打包到存档中,在计算机中提供精确的部件尺寸 A ;
    2. 打包完全相同的文件,在计算机 B 中提供完全相同的部件尺寸( TODO: 检查此实验是否仍然适用于具有不同架构的类似架构,例如Intel i7与Intel i5 )(例如,带AMD处理器的Intel处理器);
    3. 从计算机 B 到计算机 A 传输一个(或多个,如果您愿意,但当然不是全部!)部件。请务必在转移之前从计算机 A 中删除这些文件;
    4. 将所有文件放在同一目录中,检查它们是否都具有相同的名称(例如“ AAA part1 ”,“ AAA part2 ”......);
    5. 提取它们;
    6. 享受 CRC错误!
    7. 使用 Intel i7-3632QM AMD FX 6300 进行测试。

      我有一些怀疑是因为压缩文件是相同的,但CRC代码是不同的。


      旧答案

      确实有一种方法。在我的计算机科学学术期间,我们有一个计算机取证课程。我了解到每个文件都有一个静态的开头(我们可以说是一个标题),它使程序识别出它的类型和解密方式。要看到它,你只需要用文本编辑器打开它(到目前为止,Notepad ++是最好的,我猜)

      例如,jpeg图像以ÿØÿá开头。

      我尝试将视频存储在一些拆分的.rar文件中,并且知道它们是否属于同一个存档,这比我想象的要简单。

      每个rar文件都以Rar!开头。在第二行或第三行,它应该显示存档中存储的文件的名称:在我的例子中,myVideo.mp4。如果您的所有档案都包含该文件名,则它们可能是同一档案的一部分。

      如果档案中有多个文件并且您不知道他们的名字,情况会变得更糟。实际上,如果有多个文件,则RAR文件结构如下:

      文件1:

      Rar!
      NUL NUL NUL //Random things here
      NUL NUL NUL NUL NUL myVideo.mp4 NUL NUL NUL NUL
      //Random things here. If the dimensions of the file exceed the archive,
      //the next file will begin with the same name.
      //Let's assume that this is happening.
      EOF
      

      文件2:

      Rar!
      NUL NUL NUL //Random things here
      NUL NUL myVideo.mp4 NUL NUL NUL
      //This time the file is complete. Since there is still space in the archive,
      //it will add another file
      NUL NUL NUL NUL mySecondVideo.mp4 NUL NUL NUL NUL
      EOF
      

      我们假设在第二个存档结束时,mySecondVideo尚未完全压缩。

      文件3:

      Rar!
      NUL NUL NUL
      NUL NUL NUL NUL mySecondVideo.mp4 NUL
      NUL NUL NUL
      NUL myTextFile.txt
      NUL NUL NUL mySecondTextFile.txt NUL
      EOF
      

      如果mySecondTextFile.txt尚未完全压缩,我的第四个文件将以其名称开头。

      我希望很清楚,我尽量保持简单。在更多文件的情况下,我将从最后一个存档开始。我写下了在该文件中找到的第一个文件名,我将在前一个文件中搜索它。如果我找到了这个名字,我会重复这个序列直到第一个档案。