objective-c - 在 objective-c 中移动后保留对文件的引用?

标签 objective-c cocoa filesystems

我有一个 Cocoa 应用程序,它在用户的计算机上存储对多媒体文件(图像、视频等)的引用。我想知道是否有其他方法可以使用文件路径获取对该文件的引用,这样如果用户将该文件移动到他们计算机上的其他文件夹,我仍然会知道它在哪里。我目前正在存储从标准 Cocoa 打开对话框传回的文件路径数组:

-(void)addMultimediaDidEnd:(NSOpenPanel*)sheet
           returnCode:(int)returnCode
          contextInfo:(NSString *)contextInfo 
{   
    if(returnCode == NSOKButton) {
        [sheet orderOut:nil];
        [self saveFiles:[sheet filenames]];
    }
}

最佳答案

在 OS X 10.6 (Snow Leopard) 中,NSURL 可以转换为文件引用 URL(使用 -[NSURL fileReferenceURL]),它在移动中引用文件当您的应用程序正在运行时。如果要保留此文件引用,请使用 +[NSURL writeBookmarkData:toURL:options:error:] 传递由 -[NSURL bookmarkDataWithOptions:includingResourceValuesForKeys:relativeToURL:error]< 生成的书签数据。稍后可以通过 +[NSURL URLByResolvingBookmarkData:options:relativeToURL:bookmarkDataIsStale:error:] 传递从 +[NSURL bookmarkDataWithContentsOfURL:error:] 返回的书签数据来解析书签。

在 OS X 10.6 之前,可以通过 AliasManager(一个 Carbon 时代的 OS X 文件别名系统接口(interface))获得相同的功能(减去一些网络感知的细节)。在 Alias Manager 之上有几个 Objective-C 包装器,可以更好地从 Cocoa 中使用它。我最喜欢的是 Wolf Rentzsch 对 Chris Hanson 的 BDAlias 的补充(在 github 上可用)。

关于objective-c - 在 objective-c 中移动后保留对文件的引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1468394/

相关文章:

ios - 隐藏View但仍然显示UIWebView

ios - 自定义 UIViewController viewDidUnload 永远不会被调用

cocoa - 调整窗口大小时固定 NSScrollView 的文档 View

c - 使用 GENERIC_ALL 访问权限在 ProjectedFS 中打开文件(投影文件系统)

c++ - 使用 Boost 1.56.0 编译问题

objective-c - 选择行时 UIPickerView 不会被删除

objective-c - 比较两个 NSMutableDictionaries

docker - 如何在docker容器和本地文件系统之间交换文件?

objective-c - AVFoundation 相当于 ffmpeg CRF

objective-c - 运行shell脚本objective-c的最简单方法