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 に答える