稍微说一下Resource Fork

话说,上次那个分享壁纸的文章,今天看到Twitter上有人说里面解压出来好多不完整的以“._”开头的文件,问是不是打包错误的缘故

嘛,事实上这个是由于Mac OS X本身的系统构造,或者准确点说是Mac OS X所采用的HFS/HFS+文件系统的特性所决定的

于是,这个所谓的特性,就是HFS/HFS+文件系统当中,一个文件会被分成保存数据部分的Data Fork,和保存文件信息部分的Resource Fork两个部分(新的HFS+文件系统当中甚至还可以保存更多的Fork,比如用户自定义Fork等等),而由于这样的文件管理方式只有HFS/HFS+文件系统,而采用这种文件系统的只有Mac OS X一个,所以是事实上的只有Mac OS X操作系统会有Resource Fork

而这样的multi-fork的文件系统设计,虽然对系统内的文件管理非常方便了(系统和用户可以将任何情报写入文件当中,甚至可以做到Resource Fork比Data Fork更大),但是在现在网络异常发达的今天,跨系统文件交流已经是日常琐事呢,所以一旦将文件压缩发到不支持Resource Fork的非HFS/HFS+文件系统当中,比如使用FAT32/NTFS的Windows环境当中,这些Resource Fork在解压的时候就只能被作为另外的一个单独的文件解压出来,这些就是那些“._”开头的文件的本质了

而当前Mac上的第三方压缩软件通常支持在压缩时把文件里面的Resource Fork部分去掉,因此使用第三方软件压出来的7z的压缩包解压出来就没有这个问题;而使用系统自己的zip压缩系统,就会因为不会把Resource Fork去掉而导致用户在非HFS/HFS+环境下解压时出现._开头的文件

于是乎根据Wikipedia的说法,似乎苹果现在开始尽量不让系统生成Resource Fork了,不知道今后如果系统完全支持ZFS文件系统之后这种情况是不是会有所改善呢?(在那之前还不知道苹果到底是不是真的会在今后的系统当中采用ZFS呢=w=a)

Author: 星野恵瑠

Mac user, Niji-Ota, Chinese, Now working in Japan at MAGES. Inc., Future's aim is that one day my name can be listed in Wikipedia

49 thoughts on “稍微说一下Resource Fork”

  1. 你压缩时没考虑到兼容性问题么.. (OoO)
    话说如果时rar文件的话,用stufflt expander来解压会出现文件名自动剪掉的事…后来再也不敢用了.. (-w-;)
    一般我不是必须我绝对不压缩.. (:D)

  2. @Bill gates hxk:
    WinZIP也好WinRAR也好都不是系统自带的啦 (-皿-) 只是名字有个Win而已
    在WinRAR出3.X之前一直Windows上都是WinZIP是绝对主流 (=v=o)
    顺便一说新版的WinZIP(12.X)比WinRAR已经要好很多了 (:D) 而且也已经支持rar格式了

Leave a Reply

Your email address will not be published. Required fields are marked *

To create code blocks or other preformatted text, indent by four spaces:

    This will be displayed in a monospaced font. The first four 
    spaces will be stripped off, but all other whitespace
    will be preserved.
    
    Markdown is turned off in code blocks:
     [This is not a link](http://example.com)

To create not a block, but an inline code span, use backticks:

Here is some inline `code`.

For more help see http://daringfireball.net/projects/markdown/syntax

(;;) (:D) (!!!!) (……) (^o^;) (==) (OoO) (=v=o) more »Note: Commenter is allowed to use '@User+blank' to automatically notify your reply to other commenter. e.g, if ABC is one of commenter of this post, then write '@ABC '(exclude ') will automatically send your comment to ABC. Using '@all ' to notify all previous commenters. Be sure that the value of User should exactly match with commenter's name (case sensitive).