(ファイルまたはディレクトリの) 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 を返します。
上記のコードは、ディレクトリ ファイル ラッパーをネストしていないことを前提としています。