如何使用pycdlib创建带.txt后缀的ISO9660合规文件名?
解决pycdlib创建带.txt后缀ISO9660合规文件名的问题
问题原因
ISO9660 Level 1(pycdlib默认兼容模式)的文件名规则非常严格:
- 仅允许大写字母A-Z、数字0-9、下划线_
- 必须遵循8.3格式(主名最多8字符,后缀最多3字符)
- 文件名末尾需带版本号(格式为
;数字,通常用;1)
直接写/FOO.txt会触发报错,因为小写字母不符合规则,且未遵循标准格式。
解决方案1:严格遵循ISO9660 Level 1规范
将文件名改为大写的/FOO.TXT;1,完全符合8.3格式与字符要求:
try: from cStringIO import StringIO as BytesIO except ImportError: from io import BytesIO import pycdlib iso = pycdlib.PyCdlib() iso.new() foostr = b'foo\n' # 修改为合规的ISO9660文件名 iso.add_fp(BytesIO(foostr), len(foostr), '/FOO.TXT;1') iso.add_directory('/DIR1') iso.write('new.iso') iso.close()
生成的ISO在所有支持ISO9660的系统中都会显示为FOO.TXT(多数系统会自动隐藏版本号;1)。
解决方案2:启用Rock Ridge扩展支持小写/长文件名
如果需要保留小写的.txt后缀或更长的文件名,可以启用Rock Ridge扩展(兼容Linux、macOS等现代系统,同时对传统系统保留ISO9660短文件名):
try: from cStringIO import StringIO as BytesIO except ImportError: from io import BytesIO import pycdlib iso = pycdlib.PyCdlib() # 创建ISO时启用Rock Ridge 1.09扩展 iso.new(rockridge='1.09') foostr = b'foo\n' # 指定Rock Ridge长文件名(小写.txt),同时指定ISO9660兼容短文件名 iso.add_fp(BytesIO(foostr), len(foostr), '/FOO.TXT;1', rr_name='/foo.txt') iso.add_directory('/DIR1', rr_name='/dir1') iso.write('new_rockridge.iso') iso.close()
rr_name参数用于指定Rock Ridge扩展的长文件名(支持小写、更长的命名规则)- 传统系统会显示
FOO.TXT,支持Rock Ridge的系统会显示foo.txt
内容的提问来源于stack exchange,提问作者J'e
相关产品推荐
相关产品推荐

