2

当我移动文件时,一些 MacOSX 应用程序(如 iTunes)并没有真正的问题——它们仍然很容易找到移动的文件(而且我很确定它们以前没有打开过该文件)。

他们是怎么做到的?我能想到的一种可能性是 FS 事件通知系统。(相关问题

但我记得我看过一些绝对文件句柄/id 左右,我想也许他们总是可以通过该文件句柄查询当前文件名。有没有类似的东西?也许是inode nr,但这有点太少了,因为我不确定如何从inode nr 获取文件名以及如何打开文件。

4

3 回答 3

0

正如 Albert 提到的 Alias Manager 已被折旧,替换的是URL Bookmark方法

于 2013-02-09T15:47:11.557 回答
0

我认为您正在寻找的是NSURL的书签 - 由于 Apple 的短视网页设计,我在 iPad 上无法生成正确的链接,但其本质是您从 URL 获取书签并随后可以解析返回到 URL 的书签。系统会在此期间解决文件中的任何移动。

于 2013-02-09T15:44:16.533 回答
0

我刚刚发现了Alias Manager,这听起来像是我正在寻找的东西。不幸的是,这似乎已被弃用。(相关问题关于弃用的一些信息。

另一个相关问题)还有提供此类功能的NSURL 类。

Python代码:

import AppKit

def getFileNativeId(filepath):
    if not os.path.isfile(filepath): return None
    filepath = os.path.abspath(filepath)
    filepath = unicode(filepath)

    url = AppKit.NSURL.alloc().initFileURLWithPath_(filepath)   

    bookmark = url.bookmarkDataWithOptions_includingResourceValuesForKeys_relativeToURL_error_(AppKit.NSURLBookmarkCreationPreferFileIDResolution,None,None,None)
    bytes = bookmark[0].bytes().tobytes()

    return bytes

def getPathByNativeId(fileid):
    nsdata = AppKit.NSData.alloc().initWithBytes_length_(fileid, len(fileid))
    url, _, _ = AppKit.NSURL.URLByResolvingBookmarkData_options_relativeToURL_bookmarkDataIsStale_error_(nsdata, AppKit.NSURLBookmarkResolutionWithoutUI, None,None,None)

    if not url: return None

    return unicode(url.path())
于 2013-02-09T15:36:55.433 回答