Obtenez chemin pour NSFileWrapper
-
27-10-2019 - |
Question
Étant donné un objet NSFileWrapper (pour un fichier ou un répertoire), est-il possible d'obtenir le chemin complet pour l'emplacement du fichier réel sur le disque?
[fileWrapper filename]
renvoie uniquement le nom du fichier, pas le chemin, il est donc pas ce que je cherche.
La solution
Non, il n'y a pas moyen d'obtenir le chemin complet de NSFileWrapper
.
Autres conseils
Si vous utilisez NSDocument
vous pouvez obtenir le chemin d'enveloppes de fichiers régulier fichier avec un petit hack.
Tout d'abord créer une sous-classe NSFileWrapper
et surcharge les méthodes régulière fichiers qui reçoivent une URL pour stocker une copie de celui-ci.
@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
Ensuite, ajoutez cette catégorie 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:
renvoie l'URL du nœud système de fichiers si elle est disponible, ou l'URL du fichier d'origine sinon.
Le code ci-dessus suppose que vous n'êtes pas wrappers de fichier répertoire de nidification.