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

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上找到).


rgb*_*rgb 9

以下是使用书签跟踪移动文件的快速示例:

- (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