当我移动文件时,iTunes等一些MacOSX应用程序确实没有问题 - 他们仍然可以轻松找到移动的文件(我很确定他们之前没有打开过该文件)。
他们是怎么做到的?我能想到的一种可能性是FS事件通知系统。 (related question)
但我记得我已经看到一些绝对文件句柄/ id左右,我想也许他们总是可以通过该文件句柄查询当前文件名。有类似的东西吗?也许inode nr但是有点太少因为我不知道如何从inode nr获取文件名以及如何打开文件。
答案 0 :(得分:0)
我刚刚发现Alias Manager听起来像我正在寻找的东西。不幸的是,这似乎已被弃用。 (related question)Some info about the deprecation.
(Another related question)还有NSURL class提供此类功能。
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())
答案 1 :(得分:0)
我认为您正在寻找的是NSURL
的书签 - 由于Apple的短视网页设计,我在iPad上无法生成正确的链接,但其实质是您获得了来自URL的书签,随后可以将书签解析回URL。系统可以解决过渡期间文件中的任何移动。
答案 2 :(得分:0)
正如Albert提到的Alias Manager已被折旧,替换是URL Bookmark方法