Frage

Ich bin mit dieser Methode von Dave DeLong die Größe eines Ordner mit dem Carbon-Datei-Manager-API zu berechnen:

http://github.com/davedelong/BuildCleaner/blob /b2712242b4eea1fff0e78a08b393a417e3019c8a/NSFileManager+FileSize.m

(Es ist das erste Verfahren gibt)

Das Problem, das ich habe, ist, dass einige Ordner (.app Bündel in meinem Fall) nicht die richtige Größe berichten. Zum Beispiel ist Diskwarrior 8,2 MB, und das Verfahren berichtet 6.6MB

Alle Ideen, warum dies geschieht?

Danke

War es hilfreich?

Lösung

Der Finder wird Dateigrößen gerundet auf das nächste Vielfache der Blockgröße (in der Regel 4 KB), gefolgt von der tatsächlichen Größe in Bytes, und viele (die meisten) Anwendungen sind Bündel von Dateien, so dass die wahre Größe der Anwendung melden kann weit kleiner als die Größe als der erste ( „auf der Festplatte“) Wert angezeigt.

Sie können dies, indem Sie etwas testen (im Terminal) wie:

echo -n 'foo' > foo.txt

Wenn Sie Informationen über diese Datei im Finder zu bekommen, wird es die Größe als Bericht „4 KB auf der Festplatte (3 Byte)“.

Andere Tipps

Ich habe an diesem Quellcode von mir verbessert, die Sie verknüpft haben. Hier ist die neuere Version:

http://github.com/davedelong/BetterInfo/blob /aa1cfe079dad6207a7ddac84b108a768c2cc7156/NSFileManager+BetterInfo.m (Sie werden auch die entsprechenden .h-Datei benötigen und diese Unterstützungsdatei )

Jetzt statt Rückkehr und NSUInteger, es gibt eine Struktur vom Typ "BIItemSyze", die sechs Mitglieder hat. DataLogicalSize, dataPhysicalSize, resourceLogicalSize, resourcePhysicalSize, logicalSize und physicalSize

Wenn Sie wissen, wie Applescript in Ihrem Code zu verwenden, ist hier eine Methode o die Größe zurück, die Sie im Finder Get Info-Fenster sehen würde. Beachten Sie, dass der zurückgegebene Wert in Byte.

on getSizeInBytesFromPosixPath(posixPath)
    try
        set b to (POSIX file posixPath) as string
        tell application "Finder" to return size of (b as alias)
    on error
        return 0
    end try
end getSizeInBytesFromPosixPath
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top