Keep a reference to a file after it has moved in objective-c?

后端 未结 2 1190
终归单人心
终归单人心 2020-12-23 23:04

I have a Cocoa application that stores a reference to multimedia files (images, videos, etc) on the user\'s computer. I\'m wondering if there is a way to get a reference to

相关标签:
2条回答
  • 2020-12-23 23:52

    In OS X 10.6 (Snow Leopard), an NSURL can be converted to a file reference URL (using -[NSURL fileReferenceURL]) which references a file across moves while your application is running. If you want to persist this file reference, use +[NSURL writeBookmarkData:toURL:options:error:] passing the bookmark data generated with -[NSURL bookmarkDataWithOptions:includingResourceValuesForKeys:relativeToURL:error]. The bookmark can be resolved later with +[NSURL URLByResolvingBookmarkData:options:relativeToURL:bookmarkDataIsStale:error:] passing the bookmark data returned from +[NSURL bookmarkDataWithContentsOfURL:error:].

    Prior to OS X 10.6, the same functionality (minus some network aware niceties) is available via the AliasManager, a Carbon-era interface to the OS X file alias system. There are a couple of Objective-C wrappers on top of the Alias Manager that make using it from Cocoa much nicer. My favorite is Wolf Rentzsch's additions to Chris Hanson's BDAlias (available on github).

    0 讨论(0)
  • Here's a quick example of using bookmarks to track files across moves:

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

    From https://github.com/ptrsghr/FileWatcher/blob/master/FileWatcherExample/Classes/FileWatcher.m

    0 讨论(0)
提交回复
热议问题