macos - 除了路径之外,Mac OS X 上还有哪些其他类型的持久文件引用?

标签 macos cocoa file

当我在 TextEdit 中打开文本文档、退出它、重命名该文件并重新启动 TextEdit 时,重命名的文件将自动打开。如果文件移动到不同的文件夹,同样如此。

我从这个实验中得出的结论是,无论处理什么文档应该在 Mac OS X 上自动重新打开,都不使用文件路径,或者至少不只使用文件路径。

那么,除了文件路径之外,我可以向文档写入哪种类型的文件引用,即使在我的应用程序未运行时目标文件被重命名或移动,该文档也将保持有效?

我对此很感兴趣,因为我正在开发一个应用程序,该应用程序可能需要在其自己的文档中存储对其他文件的引用。

最佳答案

您正在寻找基于 NSURL 的解决方案。您可以创建一个书签,即使文件被移动/重命名,该书签也会引用该文件。

借用FileWatcher on GitHub by Peter Sugihara :

- (NSData *)bookmarkFromURL:(NSURL *)url {
    NSData *bookmark = [url bookmarkDataWithOptions:NSURLBookmarkCreationPreferFileIDResolution
                     includingResourceValuesForKeys:NULL
                                      relativeToURL:NULL
                                              error:NULL];
    return bookmark;
}

- (NSURL *)urlFromBookmark:(NSData *)bookmark {
    NSError *error = noErr;
    NSURL *url = [NSURL URLByResolvingBookmarkData:bookmark
                                           options:NSURLBookmarkResolutionWithoutUI
                                     relativeToURL:NULL
                               bookmarkDataIsStale:NULL
                                             error:&error];
    if (error != noErr)
        NSLog(@"%@", [error description]);
    return url;
}

您可以安全地保留返回的书签数据,并且在您的应用重新启动后它将指向同一文件。

官方文档中的附加信息:Locating Files Using Bookmarks

编辑:根据 Peter Hosey 与上述代码中的错误处理相关的非常有效的建议,请注意:来自 FileWatcher 的上述代码不按照标准处理错误,并附加到服务作为指导方针。

具体请引用官方文档。

关于macos - 除了路径之外,Mac OS X 上还有哪些其他类型的持久文件引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14912625/

相关文章:

python - 导入错误 : No module named 'selenium'

objective-c - Mac 应用程序中的 Facebook

objective-c - 多个 block 相互嵌套,使用强自体和弱自体来避免循环引用

cocoa - 让 WebView 的行为与 Safari 完全相同

c - 如何将二进制文件中的结构写入另一个二进制文件中的嵌套结构?

mysql - 在 Mac 上安装 MySQL

c++ - 移动鼠标光标(Windows 的 SetCursorPos 的 OSX 版本)

cocoa - 将 NSAttributedString 转换为纯文本

file - 马文 : Removing format file extension from created assembly

java - 在这种情况下,最好使用数据库还是读取文件来提高性能?