You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python rarfile判断RarInfo是否跨多个分卷?

判断RarInfo对象是否跨多卷RAR分卷的方法

要判断rarfile返回的RarInfo对象对应的文件是否跨越多个分卷,可通过以下几种实用方式实现:

  • 对比文件大小与起始分卷剩余容量
    这是最直接的判断方式:

    1. 提取目标RarInfo的file_size(文件总字节数)和header_offset(文件头在起始分卷中的偏移量)。
    2. 通过rf.volumename(info.volume)获取起始分卷的路径,再用os.path.getsize()读取该分卷的实际大小。
    3. 计算起始分卷中能容纳该文件的最大字节数:分卷总大小 - header_offset。如果file_size大于这个值,说明文件数据无法完全存放在起始分卷中,必然跨卷。

    示例代码:

    import rarfile
    import os
    
    with rarfile.RarFile("your-multi-part.rar") as rf:
        for info in rf.infolist():
            if info.is_dir():
                continue
            # 获取起始分卷的路径和总大小
            vol_path = rf.volumename(info.volume)
            vol_total_size = os.path.getsize(vol_path)
            # 计算起始分卷可容纳该文件的最大空间
            max_available = vol_total_size - info.header_offset
            # 判断是否跨卷
            is_cross_volume = info.file_size > max_available
            print(f"文件 {info.filename} 跨卷状态: {is_cross_volume}")
    
  • 解析RAR标志位
    RAR格式的文件头包含标志位信息,RarInfo的flags属性中封装了这些标记。你可以结合rarfile库定义的常量判断,比如检查是否包含跨卷相关标志:

    is_cross_volume = bool(info.flags & rarfile.RAR_VOLUME)
    

    注意:该标志的具体含义需对应rarfile版本的RAR格式说明,不同版本可能存在差异。

  • 辅助验证分卷数量
    如果文件的起始分卷编号小于归档的总分卷数,且文件大小远大于单分卷的常规容量,可辅助判断跨卷,但这种方法准确性较低,仅作为补充参考。

内容的提问来源于stack exchange,提问作者ramtin arefkia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 07:15:38