Aus*_*tin 14 filesystems cocoa objective-c
我有一个Cocoa应用程序,用于在用户的计算机上存储对多媒体文件(图像,视频等)的引用.我想知道是否有办法获得对该文件的引用,使用文件路径,以便如果用户将该文件移动到其计算机上的其他文件夹,我仍然会知道它在哪里.我目前正在存储从标准Cocoa打开对话框传回的文件路径数组:
-(void)addMultimediaDidEnd:(NSOpenPanel*)sheet
returnCode:(int)returnCode
contextInfo:(NSString *)contextInfo
{
if(returnCode == NSOKButton) {
[sheet orderOut:nil];
[self saveFiles:[sheet filenames]];
}
}
Run Code Online (Sandbox Code Playgroud)
Bar*_*ark 18
在OS X 10.6(Snow Leopard)中,NSURL可以将a转换为文件引用URL(使用-[NSURL fileReferenceURL]),该URL 在应用程序运行时引用跨文件的文件.如果要保留此文件引用,请使用+[NSURL writeBookmarkData:toURL:options:error:]生成的书签数据-[NSURL bookmarkDataWithOptions:includingResourceValuesForKeys:relativeToURL:error].稍后可以+[NSURL URLByResolvingBookmarkData:options:relativeToURL:bookmarkDataIsStale:error:]通过传递从中返回的书签数据来解析书签+[NSURL bookmarkDataWithContentsOfURL:error:].
在OS X 10.6之前,可以通过AliasManager获得相同的功能(减去一些网络感知的细节),AliasManager是OS X文件别名系统的Carbon-era接口.Alias Manager上有几个Objective-C包装器,可以更好地使用Cocoa中的它.我最喜欢的是Wolf Rentzsch对Chris Hanson的补充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;
}
Run Code Online (Sandbox Code Playgroud)
来自https://github.com/ptrsghr/FileWatcher/blob/master/FileWatcherExample/Classes/FileWatcher.m