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

È stato utile?

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 .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top