10

给定一个 NSFileWrapper 对象(对于文件或目录),有没有办法获取磁盘上实际文件位置的完整路径?

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

4

3 回答 3

5

不,没有办法从NSFileWrapper.

于 2012-01-13T05:16:53.450 回答
3

如果您正在使用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。

上面的代码假定您没有嵌套目录文件包装器。

于 2012-08-29T16:47:10.567 回答
0

您可以将路径组件附加到 UIDocument 文件 URL。

斯威夫特 5.2

document.fileURL.appendingPathComponent("MyFolder", isDirectory: true).appendingPathComponent("MyImage.png", isDirectory: false)
于 2020-03-22T17:02:11.483 回答