Access-o-Mania

Access-Forum (Deutsch/German) => Access-Hilfe => Thema gestartet von: crystal am Mai 14, 2020, 18:45:46

Titel: Shell: Folderitem
Beitrag von: crystal am Mai 14, 2020, 18:45:46
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?
Titel: Re: Shell: Folderitem
Beitrag von: crystal am Mai 14, 2020, 19:07:48
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
Titel: Re: Shell: Folderitem
Beitrag von: crystal am Mai 14, 2020, 20:40:50
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?
Titel: Re: Shell: Folderitem
Beitrag von: crystal am Mai 14, 2020, 21:14:36
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?