Größe Diskrepanz zwischen Größe des Ordners aus dem Finder und aus Carbon-Dateimanager
-
18-09-2019 - |
Frage
Ich bin mit dieser Methode von Dave DeLong die Größe eines Ordner mit dem Carbon-Datei-Manager-API zu berechnen:
(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
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