NSString alla conversione FSRef non funziona
-
16-09-2019 - |
Domanda
Per la mia app ho bisogno di usare il file manager di carbonio API per ottenere la dimensione di una cartella (NSEnumerator è lenta, e l'utilizzo di NSTask con un comando shell è ancora peggio). Ho importato il quadro di carbonio, e sto usando questo metodo per ottenere la dimensione di una cartella:
http://www.cocoabuilder.com/archive / messaggio / cacao / 2005/5/20 / 136.503
Si avvale di un FSRef come argomento, e la mia stringa di percorso è attualmente un NSString. Ho provato ad utilizzare questo per convertire il NSString a un FSRef:
FSRef f;
OSStatus os_status = FSPathMakeRef((const UInt8 *)[filePath fileSystemRepresentation], &f, NULL);
if (os_status != noErr) {
NSLog(@"fsref creation failed");
}
E poi ho chiamato il metodo dimensioni della cartella:
[self fastFolderSizeAtFSRef:f];
Tuttavia quando provo ad installare, ottengo questo errore per quanto riguarda la linea di cui sopra:
errore: Tipo incompatibili per argomento una delle 'fastFolderSizeAtFSRef:'
Qualsiasi aiuto sarebbe apprezzato. Grazie
Soluzione
Il metodo "fastFolderSizeAtFSRef" prende un (puntatore FSRef) FSRef *. Si sta dando un FSRef. Si tratta di una correzione di un carattere, per fortuna. Hai:
[self fastFolderSizeAtFSRef:f];
È sufficiente cambiare la situazione a:
[self fastFolderSizeAtFSRef:&f];
E si dovrebbe essere a posto. Tuttavia, ero implementando questo stesso metodo ma ieri avuto problemi creando il FSRef stessa. Alla fine ho andato con il seguente codice:
FSRef convertNSStringToFSRef(NSString * theString) {
FSRef output;
const char *filePathAsCString = [theString UTF8String];
CFURLRef url = CFURLCreateWithBytes(kCFAllocatorDefault,
(const UInt8 *)filePathAsCString,
strlen(filePathAsCString),
kCFStringEncodingUTF8,
NULL);
CFURLGetFSRef(url, &output);
CFRelease(url);
return output;
}
Questo ha lavorato senza problemi per me.
EDIT:. Ho appena open source il codice che sto usando questo E 'di questi file:
Questo file aggiunge un metodo per NSFileManager che utilizza un FSRef da trovare il formato completo di una directory .
Questo file aggiunge un metodo per NSString che convertirlo in un FSRef .
Tutto avviene sulla linea 46 di questo file .