我有一个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,碳时代的界面到OS X文件别名系统可用。 上有别名管理器的顶部一对夫妇的Objective-C封装的,使用户使用它从可可更好。 我最喜欢的是狼Rentzsch的补充,克里斯·汉森的BDAlias
(可在github上 )。
下面是使用书签跨移动跟踪文件的一个简单的例子:
- (NSData *)bookmarkFromURL:(NSURL *)url {
NSData *bookmark = [url bookmarkDataWithOptions:NSURLBookmarkCreationMinimalBookmark
includingResourceValuesForKeys:NULL
relativeToURL:NULL
error:NULL];
return bookmark;
}
- (NSURL *)urlFromBookmark:(NSData *)bookmark {
NSURL *url = [NSURL URLByResolvingBookmarkData:bookmark
options:NSURLBookmarkResolutionWithoutUI
relativeToURL:NULL
bookmarkDataIsStale:NO
error:NULL];
return url;
}
从https://github.com/ptrsghr/FileWatcher/blob/master/FileWatcherExample/Classes/FileWatcher.m