Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos OSX:查找移动的文件_Macos_Filesystems - Fatal编程技术网

Macos OSX:查找移动的文件

Macos OSX:查找移动的文件,macos,filesystems,Macos,Filesystems,有些MacOSX应用程序(如iTunes)在我移动文件时不会出现问题——它们仍然可以很容易地找到移动的文件(我很确定它们以前没有打开过文件) 他们是怎么做到的?我可以想到的一种可能性是FS事件通知系统。() 但我记得我看到过一些绝对文件句柄/id,我想也许他们总是可以通过该文件句柄查询当前文件名。有这样的事吗?可能是inode nr,但这有点太少了,因为我不确定如何从inode nr获取文件名以及如何打开文件。我刚刚发现了与我正在搜索的内容类似的。不幸的是,这似乎不受欢迎。() ()还有提供这种

有些MacOSX应用程序(如iTunes)在我移动文件时不会出现问题——它们仍然可以很容易地找到移动的文件(我很确定它们以前没有打开过文件)

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


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

我刚刚发现了与我正在搜索的内容类似的。不幸的是,这似乎不受欢迎。()

()还有提供这种功能的

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())

我想你要找的是苹果的书签——我在iPad上,由于苹果公司短视的网页设计,无法生成正确的链接,但其本质是,你可以从URL获取书签,然后将书签解析回URL。在此期间,系统会处理文件中的任何移动。

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