zu FSRef Umwandlung NSString funktioniert nicht
-
16-09-2019 - |
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
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 .