给定NSFileWrapper对象(对于文件或目录),有什么办法可以获得磁盘上实际文件位置的完整路径吗?获取NSFileWrapper的路径
[fileWrapper filename]
只返回文件名,而不是路径,所以它不是我正在寻找的。
给定NSFileWrapper对象(对于文件或目录),有什么办法可以获得磁盘上实际文件位置的完整路径吗?获取NSFileWrapper的路径
[fileWrapper filename]
只返回文件名,而不是路径,所以它不是我正在寻找的。
不,没有办法从NSFileWrapper
获得完整路径。
如果您在'NSDcoument'中使用'NSFileWrapper',有一种方法。看到我的答案。 – hpique 2012-08-29 16:48:41
如果您使用的是NSDocument
,您可以通过一些小技巧获得常规文件文件包装的路径。
首先创建一个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,如果不。
上面的代码假定你没有嵌套目录文件包装。
你如何将标准的NSFileWrapper类替换为你的自定义子类? – 2013-08-08 12:53:17
此外,这种方法保证了返回的URL很少。如果启用了自动保存功能,则文件的位置只能用于读取或写入,这取决于您何时设法捕获NSURL实例。我已经提交http://openradar.me/14692573 – 2013-08-09 00:43:12
请问这仍然与存储在iCloud中的东西..? – cacau 2014-03-14 09:44:32
如果你正在使用'NSDocument' .... http://www.zedkep.com/blog/index.php?/archives/197-Determining-a-full-file-path-from-an -NSFileWrapper.html – 2012-01-13 05:21:18
我正在使用'NSDocument',并且我确实看到了这篇文章。我唯一担心的是文档可能会在打开时移动到新的位置,并且这是透明处理的。但是如果我尝试通过旧路径访问文件,它会崩溃。 – Greg 2012-01-13 09:23:53
在'NSDocument'中是否有回调函数来告诉我文件在物理上移动还是重命名? – Greg 2012-01-13 09:25:21