Given an NSFileWrapper object (for a file or directory), is there any way to get the full path for the location of the actual file on the disk?
[fileWrapper filename]
only returns the file name, not the path, so it isn't what I'm looking for.
Given an NSFileWrapper object (for a file or directory), is there any way to get the full path for the location of the actual file on the disk?
[fileWrapper filename]
only returns the file name, not the path, so it isn't what I'm looking for.
If you're using NSDocument
you can get the path of regular-file file wrappers with a little hack.
First create a NSFileWrapper
subclass and overload the regular-file methods that receive a URL to store a copy of it.
@implementation RMFileWrapper
- (id) initWithURL:(NSURL *)url options:(NSFileWrapperReadingOptions)options error:(NSError *__autoreleasing *)outError {
if (self = [super initWithURL:url options:options error:outError]) {
self.originalURL = url;
}
return self;
}
- (BOOL) readFromURL:(NSURL *)url options:(NSFileWrapperReadingOptions)options error:(NSError *__autoreleasing *)outError {
BOOL successful = [super readFromURL:url options:options error:outError];
if (successful) {
self.originalURL = url;
}
return successful;
}
@end
Then add this NSFileWrapper
category:
@implementation NSFileWrapper(bestURLWithDocument)
- (NSURL*) bestURLInDocument:(SBDocument*)document {
if (document.fileURL && self.filename) {
NSString* path = [document.fileURL.path stringByAppendingPathComponent:self.filename];
return [NSURL fileURLWithPath:path];
} else if ([self isKindOfClass:[RMFileWrapper class]]) {
RMFileWrapper *fileWrapper = (RMFileWrapper*) self;
return fileWrapper.originalURL;
}
return nil;
}
@end
bestURLInDocument:
will return the url of the file-system node if available, or the original file url if not.
The above code assumes that you're not nesting directory file wrappers.
No, there's no way to get the full path from
NSFileWrapper
.