获取NSFileWrapper的path

给定一个NSFileWrapper对象(对于文件或目录),有什么办法可以获得磁盘上实际文件位置的完整path吗?

[fileWrapper filename]只返回文件名,而不是path,所以它不是我要找的。

不,没有办法从NSFileWrapper获取完整的path。

如果你使用的是NSDocument你可以通过一些小技巧来获得常规文件文件包装的path。

首先创build一个NSFileWrapper子类,并重载接收URL来存储其副本的常规文件方法。

 @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 

然后添加这个NSFileWrapper类别:

 @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:将返回文件系统节点的url(如果可用),如果没有则返回原始文件的url。

上面的代码假定你不是嵌套目录文件包装。