Если вы используете 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, если нет.
В приведенном выше коде предполагается, что вы не вставляете файлы каталога.
Если вы используете 'NSDocument' ... http://www.zedkep.com/blog/index.php?/archives/197-Determining-a-full-file-path-from-an -NSFileWrapper.html –
Я использую 'NSDocument', и я видел этот пост. Моя единственная проблема заключается в том, что документ можно было перемещать в новое место, пока он открыт, и это обрабатывается прозрачно. Но если я попытаюсь получить доступ к файлу по старому пути, он потерпит крах. – Greg
Есть ли функция обратного вызова в 'NSDocument', чтобы сообщить мне, когда файл физически перемещается или переименовывается? – Greg