當我移動一個文件時,像iTunes這樣的一些MacOSX應用程序並沒有真正的問題 - 他們仍然很容易找到移動的文件(我確信他們以前沒有打開文件)。OSX:找到移動的文件
他們是怎麼做到的?我能想到的一種可能性是FS事件通知系統。 (related question)
但我記得我已經看過一些絕對的文件句柄/ ID左右,我想也許他們總是可以通過該文件句柄查詢當前文件名。有沒有這樣的事情?也許是inode nr,但這有點太少了,因爲我不確定如何從inode nr獲取文件名以及如何打開文件。
當我移動一個文件時,像iTunes這樣的一些MacOSX應用程序並沒有真正的問題 - 他們仍然很容易找到移動的文件(我確信他們以前沒有打開文件)。OSX:找到移動的文件
他們是怎麼做到的?我能想到的一種可能性是FS事件通知系統。 (related question)
但我記得我已經看過一些絕對的文件句柄/ ID左右,我想也許他們總是可以通過該文件句柄查詢當前文件名。有沒有這樣的事情?也許是inode nr,但這有點太少了,因爲我不確定如何從inode nr獲取文件名以及如何打開文件。
正如阿爾貝提到的別名管理器已貶值,替換是URL Bookmark方法
我剛剛發現了關於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())
我想你要找的是什麼NSURL
的書籤 - 我在iPad上,由於蘋果公司的短視的網頁設計,但實質做無法產生正確的鏈接它是你從一個URL獲得書籤,然後可以將書籤解析回一個URL。該系統適用於臨時文件中的任何移動。