读写Macintosh HFS卷库
machfs的Python项目详细描述
这是一个用于创建和检查的库 HFS-格式 磁盘映像。mac特有的概念,如resource forks和 type/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!
命令行界面
此包还安装MakeHFS
和DumpHFS
实用程序,用于
使用本机文件系统上的文件夹。简而言之,资源分叉
存储在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也会发生。当前机器
有内存和循环要烧掉,因此
高级编程语言似乎是一个合理的折衷方案。作为一个
结果,machfs
比
libhfs
,并且更易于维护,在
表演。