OSX:找到移动的文件

时间:2013-02-09 15:31:34

标签: macos filesystems

当我移动文件时,iTunes等一些MacOSX应用程序确实没有问题 - 他们仍然可以轻松找到移动的文件(我很确定他们之前没有打开过该文件)。

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

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

3 个答案:

答案 0 :(得分:0)

我刚刚发现Alias Manager听起来像我正在寻找的东西。不幸的是,这似乎已被弃用。 (related questionSome 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方法