给定一个 NSFileWrapper 对象(对于文件或目录),有没有办法获取磁盘上实际文件位置的完整路径?
[fileWrapper filename]
只返回文件名,而不是路径,所以它不是我要找的。
给定一个 NSFileWrapper 对象(对于文件或目录),有没有办法获取磁盘上实际文件位置的完整路径?
[fileWrapper filename]
只返回文件名,而不是路径,所以它不是我要找的。
不,没有办法从NSFileWrapper
.
如果您正在使用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。
上面的代码假定您没有嵌套目录文件包装器。
您可以将路径组件附加到 UIDocument 文件 URL。
斯威夫特 5.2
document.fileURL.appendingPathComponent("MyFolder", isDirectory: true).appendingPathComponent("MyImage.png", isDirectory: false)