attributesOfItemAtPath fileSize immer 102

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • attributesOfItemAtPath fileSize immer 102

    Mache ich was falsch oder warum bekomme ich immer 102 als file Größe?

    Quellcode

    1. + (NSUInteger)sizeOfFileFromURL:(NSURL *)url{
    2. NSDictionary *fAttrs = [[NSFileManager defaultManager] attributesOfItemAtPath:url.path error:nil];
    3. return (NSUInteger)[fAttrs fileSize];
    4. }


    Die Debugausgabe sieht wie folgt aus:
    Printing description of url:

    >>> file:///Applications/Xcode.app

    für fAttrs
    ...
    >>> NSFilePosixPermissions = 493;
    >>> NSFileReferenceCount = 3;
    >>> NSFileSize = 102;
    >>> NSFileSystemFileNumber = 13145668;
    >>> NSFileSystemNumber = 16777220;
    >>> NSFileType = NSFileTypeDirectory;
    }

    Und da haben wirs: 102. Bei anderen Apps das gleiche in grün.
  • https://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/NSDictionary_Class/index.html#//apple_ref/occ/instm/NSDictionary/fileSize

    If the file has a resource fork, the returned value does not include the size of the resource fork.


    Eine App ist ein Ordner. Ein Ordner ist nicht besonders groß.
    102 Byte ist eine adäquate Größe für einen App Ordner mit nur einem Contents Unterordner.

    Ein symbolischer Link hat hier sogar nur 92 Byte.
    Der Unterordner 'Utilities' hat 782 Byte bei ca. 20 Unterordnern.

    Also lautet die Antwort auf Deine Frage:
    Du machst alles richtig, Dein Ordner ist halt genau 102 Byte groß.
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P
  • Bei großen Ordnern ist der Finder ziemlich langsam, was die Anzeige der Gesamtgröße angeht.
    Zumindest beim ersten mal.

    Ich vermute ein Caching dahinter im .DS_Store, da Realität und Finder oftmals voneinander abweichen.
    Alle anderen mir bekannten Apps gehen rekursiv alle Ordner durch.
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P
  • Quellcode

    1. ​+ (NSUInteger)sizeOfFolderFromURL:(NSURL *)url{
    2. NSArray *contents;
    3. NSEnumerator *enumerator;
    4. NSString *filePath;
    5. contents = [[NSFileManager defaultManager] subpathsAtPath:url.path];
    6. enumerator = [contents objectEnumerator];
    7. NSUInteger fileSizeInt = 0;
    8. while (filePath = [enumerator nextObject])
    9. {
    10. NSDictionary *fattrib = [[NSFileManager defaultManager] attributesOfItemAtPath:[url.path stringByAppendingPathComponent:filePath] error:nil];
    11. fileSizeInt +=[fattrib fileSize];
    12. }
    13. return fileSizeInt;
    14. }
    Alles anzeigen


    hab das so nun gelöst. Gefällt mir aber gar nicht. Die CPU dreht auf und der Speicher (wenn ich Xcode auswähle) geht auf >300MB kurzzeitig :/

    Gibt ne schlauere Alternative? Könnte man das auf Threads oder Hintergrundprozesse auslagern?
  • Ziemlich viele Objekte und ziemlich viel Messaging.
    Eventuell solltest Du einen Autorelease-Pool in Erwägung ziehen, um ab und an mal alte Referenzen wegzuschmeißen.

    Das Auslagern in den Hintergrund verdoppelt weder Deinen RAM noch Deine CPU Leistung. :P
    Es könnte höchstens verhindern, dass Dein UI blockiert. Sonst nix.
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P