Hallo!
Ich lese mittels shell32 aus Dateien deren Größe mit ...FolderItem(1)... aus.
Es werden Strings wie "456 KB", "45,6 KB", "1,02 GB" usw. zurück gegeben.
Wie kann ich diese Angaben z.B. in KB umrechnen (im ersten Beispiel trivial)?
Und was bedeuten die Nachkommastellen z.B. in "1,02 GB"? Sind das 2 Megabyte oder 0,02*1024 MB?
Oh - schon selbst gelöst:
...FolderItem.Size gibt die Größe in Bytes an.
Die muss man dann nur noch teilen und erhält z.B. MB (hier ohne Nachkommastellen):
SizeMB = ...FolderItem.Size \ 1024 \ 1024
Leider doch nicht gelöst.
Bei einer Dateigröße von z.B. 2,13 GB gibt .Size den Wert -2005743837 zurück.
Wie muss ich das umrechnen?
Es geht wohl so:
v = objFolderItem.Size
If v < 0 Then
v = v + 2 ^ 32
End If
FileSizeMB = Val(v / 1024 \ 1024)
Anmerkung:
FileSizeMB = Val(v \ 1024 \ 1024) bringt einen Überlauf-Fehler obwohl v als Variant deklariert ist
Frage:
Ist das so OK? Oder gibt es eine bessere Lösung?
Es scheint so zu sein, das .Size des FolderObjects die Größe der Datei in Bytes in einem 4-Byte-breiten Feld zurückgibt (4*8, 2^32). Ab ca. 2GB wird es dann negativ. Was passiert bei Dateien, die 4 oder 8 GB groß sind???
Deshalb nochmal meine Frage:
Gibt es eine bessere Lösung?