是否有任何(最好是免费的)组件或库来处理ISO文件?
特别是我希望能够添加文件并保存到ISO,以及从ISO中提取文件.
我不需要高级功能或花里胡哨,只需要做我上面提到的事情.
我试图找到一些,但真的没有想到.
也许这可以在不需要这样的库的情况下完成?如果是这样,你会推荐什么方法?
几个月前我已经在这里问了类似的东西,但当然我的更新中使用的解决方案并不好,因为我不知道哪个偏移量启动了我想要的文件,该代码读取整个文件,直到找到所需的字符串那不方便 这就是我搜索用Java编码的ISO9660文件阅读器的原因,我在这个项目中读到了完美的ISO9660文件,但有些文件格式bin
和img
我希望能够打开.
不幸的是,代码不起作用,因为它期望ISO9660标题\x01CD001\x01
位于前缀的偏移量(32768,紧接在前16个扇区之后,保留用于其他目的),如此处和此处标准所定义:
7.前十六个部门是空的
前16个扇区(扇区号0到15,包括0和15)只包含零.ISO9660没有定义这些扇区的内容,但对于DOS,它们显然总是写为零.它们显然保留供可以从CD-ROM引导的系统使用.
在我的情况下,我有img
和bin
磁盘映像的\x01CD001\x01
标题位于第18扇区结束后的偏移量37656,792字节.这使代码抛出错误.
由于有软件能够 在不需要 或文件的情况下读取bin
和img
文件的内容,在这种情况下,使用标头的规则是什么?它是标准还是粗暴地通过字节搜索标题?如果它是一个标准,我在哪里可以找到任何类型的文档/实现?cue
ccd
更新:我发现这些文件具有不同的扇区大小:2352字节/扇区,因为它们是CD-R的原始副本.
我正在将数据存档到DVD,我想要将DVD打包完整.我知道DVD上我想要的所有文件的名称和大小,但我不知道元数据占用了多少空间.我想在每张DVD上获得尽可能多的文件,所以我使用了一个带有贪婪的bin-packing的Bubblesearch启发式算法.我尝试了10,000种替代方案并获得最佳选择.目前我知道所有文件的大小,因为我不知道文件如何存储在ISO 9660文件系统中,我为元数据添加了大量的slop.我想减少污泥.
我可以使用,genisoimage -print-size
但它太慢了 - 假设40,000个文件占用500MB,大约需要3秒钟.每张DVD需要8小时不在卡片中.我以前修改了genisoimage
源代码,我真的不想尝试从源代码中挤出算法; 我希望有人知道更好的估算方法,或者可以指出一个有用的规范.
澄清问题和问题:
我需要刻录分成多张DVD的档案,通常一次大约五张.我试图解决的问题是决定将哪些文件放在每张DVD上,以便每张DVD(除了最后一张)尽可能充分.这个问题是NP难的.
我正在使用标准的贪婪打包算法,您首先放置最大的文件,然后将其放入第一张有足够空间的DVD中.所以j_random_hacker,我绝对不是从随机开始的.我从排序开始并使用Bubblesearch来扰乱文件的打包顺序.此程序将我的包装从估计容量的约80%提高到估计容量的99.5%以上.这个问题是关于更好地估计容量 ; 目前我估计的容量低于实际容量.
我编写了一个尝试10,000次扰动的程序,每个程序包含两个步骤:
第2步是我正在努力改进的步骤.正如Tyler D所暗示的那样,目前我正在"谨慎行事".但我想做得更好.我买不起,genisomage -print-size
因为它太慢了.同样,我不能将文件tar到磁盘,因为它只是太慢,但tar文件与ISO 9660图像的大小不同.这是我需要预测的ISO 9660图像的大小.原则上这可以完全准确地完成,但我不知道该怎么做.这就是问题所在.
注意:这些文件位于具有3TB硬盘存储空间的计算机上.在所有情况下,文件的平均大小至少为10MB; 有时候它会大得多.所以有可能genisomage
毕竟会足够快,但我怀疑它 - 似乎通过将ISO映像写入/ dev/null来工作,我无法想象当图像大小接近时它会足够快4.7GB.我现在无法访问该计算机,或者当我发布原始问题时.当我确实在晚上访问时,我会尝试获得更好的数字.但我认为这不是genisomage
一个好的解决方案 - 虽然它可能是学习文件系统模型的好方法,它告诉我它是如何工作的.知道块大小为2KB已经很有帮助.
知道同一目录中的文件被刻录到samae DVD也很有用,这简化了搜索.我希望直接访问这些文件,这会排除tar-before-burning.(大多数文件都是音频或视频,这意味着尝试使用它们没有意义gzip
.)
超出 ECMA-119 规范:
8.5 补充卷描述符
...
8.5.3 卷标志(BP 8):
该字段的位应从最低有效位开始编号为 0 到 7。该字段应指定卷的某些特性如下。
位 0:
如果设置为零,则表示转义序列字段仅指定根据 ISO 2735注册的转义序列;
如果设置为 ONE,则表示转义序列字段指定了至少一个未根据 ISO 2375注册的转义序列。
在 iso.org 上,我找到了 ISO- 2735标准:
密封金属食品容器——牛奶用圆形开顶和通气孔罐的容量和直径
和 ISO 2375标准:
数据处理——转义序列注册程序
有人可以确认“ISO 2735”是输入错误,意思是“ISO 2375”吗?是否有等效于 ISO 2375 的 ECMA 标准?
基于C#的文件夹结构制作.ISO文件的最佳方法是什么?是否有DiscUtils以外的开源库?遇到DiscUtils的问题,我想尝试另一条路径.我有什么选择?我更喜欢开源但可能也愿意为解决方案买单.
我刚刚读完这在ISO 9660文件系统读取文件的文章,我对我怎么会去读取文件到内存困惑.我知道根目录位于PVD的偏移量156处,如何使用它来查找驻留在根目录中的文件,一旦找到文件名,我将如何找到该文件所在的地址,这样我就可以将它加载到内存中(使用int 0x13 AH = 42)?