读写Macintosh HFS卷库

machfs的Python项目详细描述


这是一个用于创建和检查的库 HFS-格式 磁盘映像。mac特有的概念,如resource forkstype/creator codes是一流的 公民。

python接口

python api很简单。aVolume或aFolder的内容是 使用索引运算符[]访问。在处理文件系统时, 它的整个高级内容作为python对象存储在内存中。

from machfs import Volume, Folder, File

v = Volume()

v['Folder'] = Folder()

v['Folder']['File'] = File()
v['Folder']['File'].data = b'Hello from Python!\r'
v['Folder']['File'].rsrc = b'' # Use the macresources library to work with resource forks
v['Folder']['File'].type = b'TEXT'
v['Folder']['File'].creator = b'ttxt' # Teach Text/SimpleText

with open('FloppyImage.dsk', 'wb') as f:
    flat = v.write(
        size=1440*1024, # "High Density" floppy
        align=512, # Allocation block alignment modulus (2048 for CDs)
        desktopdb=True, # Create a dummy Desktop Database to prevent a rebuild on boot
        bootable=True, # This requires a folder with a ZSYS and a FNDR file
        startapp=('Folder','File'), # Path (as tuple) to an app to open at boot
    )
    f.write(flat)

with open('FloppyImage.dsk', 'rb') as f:
    flat = f.read()
    v = Volume()
    v.read(flat) # And you can read an image back!

命令行界面

此包还安装MakeHFSDumpHFS实用程序,用于 使用本机文件系统上的文件夹。简而言之,资源分叉 存储在rez格式的.rdump文件中,类型和创建者代码 存储在8字节的.idump文件中。无可否认,这种储存方法 不是很漂亮,但是它将更改公开到没有 需要特定于Mac的软件。例如,git可以跟踪添加 以及清除资源。具有TEXT类型的文件假定为 utf-8用unix风格(lf)行结尾编码,并转换为 带有mac样式(cr)行结尾的mac-os-roman编码。

这两个命令都有一个--help参数来显示它们的选项。

为什么?

我想要一个自动化的,可复制的方法来编译遗留的macos软件。 没有任何当前的操作系统完全支持hfs, libhfs/hfsutils(一个c库 和命令行包装器)是最有能力的实现。这个 实现者选择在一个假的“挂载”文件系统上模拟posix i/o。 虽然这对于内存非常有限的机器很重要,但是 在增量系统中维护一致的hfs数据结构 操作是一项复杂的任务,需要大量低级的 代码。对实际文件系统的频繁I/O也会发生。当前机器 有内存和循环要烧掉,因此 高级编程语言似乎是一个合理的折衷方案。作为一个 结果,machfslibhfs,并且更易于维护,在 表演。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
HTTP标头的java InputStream未终止   java测试SpringWebListener   具有定义的替换编号Java的regex ReplaceAll   在java中使用contains()方法   java在选择查询中使用JoinColumn字段   具有用户的java Start-stop demon不是以给定用户启动   java glBufferData生成GL\u无效\u操作   java中循环代码的循环   Java位无符号移位(>>>>)会产生奇怪的结果   java HQL使用点分隔符从select获取结果   条纹、弹簧、玩耍(或?):使用哪种高性能Java框架?   广播接收机中的java停止服务   java回收器视图占据整个屏幕。不在上面显示我的UI元素   java使MySQL查询更快   java MappedByteBuffer查询   java递归算法问题