Frage

Für meine Anwendung muß ich den Carbon-Datei-Manager-API verwenden, um die Größe eines Ordners zu bekommen (NSEnumerator langsam ist, und mit NSTask mit einem Shell-Befehl ist noch schlimmer). Ich habe den Carbon-Rahmen importiert, und ich bin mit dieser Methode die Größe eines Ordner zu bekommen:

http://www.cocoabuilder.com/archive / message / Kakao / 2005/5/20/136503

Es verwendet eine FSRef als Argument, und mein Weg Saite ist aktuell ein NSString. Ich habe versucht, dies das NSString zu einem FSRef konvertieren mit:

FSRef f;
        OSStatus os_status = FSPathMakeRef((const UInt8 *)[filePath fileSystemRepresentation], &f, NULL);

        if (os_status != noErr) {
            NSLog(@"fsref creation failed");
        }

Und dann rief ich die Ordnergröße Methode:

[self fastFolderSizeAtFSRef:f];

Allerdings, wenn ich zu bauen versuchen, ich diesen Fehler in Bezug auf die obige Zeile:

Fehler: inkompatible Typ für Argument eines "fastFolderSizeAtFSRef:

Jede Hilfe wäre sehr geschätzt. Dank

War es hilfreich?

Lösung

Die "fastFolderSizeAtFSRef" Methode nimmt eine FSRef * (FSRef pointer). Sie geben ihm eine FSRef. Es ist ein ein Zeichen zu beheben, zum Glück. Sie haben:

[self fastFolderSizeAtFSRef:f];

Einfach, dass ändern:

[self fastFolderSizeAtFSRef:&f];

Und Sie sollten gut zu gehen. Allerdings war ich das gleiche Verfahren gestern Umsetzung aber hatte Schwierigkeiten, die Schaffung der FSRef selbst. Ich ging schließlich mit dem folgenden Code:

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;
}

Dies ist einwandfrei für mich arbeiten.

EDIT:. Ich sourced nur offen, um den Code, den ich verwende diese in Es ist diese Dateien:

Diese Datei fügt eine Methode NSFileManager, die eine FSRef verwendet zu finden die komplette Größe eines Verzeichnisses . Diese Datei fügt eine Methode, um NSString, dass es zu einem FSRef konvertieren .
Alles geschieht in Zeile 46 der Datei .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top