FileSize() welche Größe?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
marcelx
Beiträge: 424
Registriert: 19.02.2010 20:19
Wohnort: Darmstadt

FileSize() welche Größe?

Beitrag von marcelx »

Hallo,

welche Größe wird da ausgegeben?
Ich habe eine Datei mit CopyFile() kopiert.
Es gibt in Eigenschaft verschiedener Größen:
"Größe" und "Größe auf Datenträger"
Mit FileSize() bekomme ich die "Größe auf Datenträger" und meine Programm sagt, dass die Dateien ungleich sind (FileSize-Vergleich), obwohl sie gleich sind.

Wie kann ich die tatsächliche Größe vergleichen?

Gruß
MarcelX
Win-10, PB 5.31 (Windows - x86)
Benutzeravatar
#NULL
Beiträge: 2235
Registriert: 20.04.2006 09:50

Re: FileSize() welche Größe?

Beitrag von #NULL »

Vielleicht verschiedene Dateisysteme/Blocksizes?
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8679
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Re: FileSize() welche Größe?

Beitrag von NicTheQuick »

FileSize() gibt dir die Byte-genaue Größe deiner Datei. Die Größe auf dem Datenträger ist ziemlich unwichtig. Sie ist nämlich einfach nur die tatsächliche Größe aufgerundet auf die Blockgröße deines Dateisystems. Das heißt eine Datei der Größe 1 Byte verbraucht auf einem Datenträger, der mit einer Blockgröße von 4 kB formatiert wurde, eben genau 4 kB. FileSize() wird dir aber 1 Byte zurückliefern.
Bild
Benutzeravatar
marcelx
Beiträge: 424
Registriert: 19.02.2010 20:19
Wohnort: Darmstadt

Re: FileSize() welche Größe?

Beitrag von marcelx »

Danke für die Erläuterung.
Das bedeutet, wenn ich den benötigte Speicherplatz überprüfen will, reicht den FileSize() nicht aus!
Win-10, PB 5.31 (Windows - x86)
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: FileSize() welche Größe?

Beitrag von RSBasic »

Wenn du den freien Speicherplatz ermitteln möchtest, dann kannst du GetDiskFreeSpaceEx_() benutzen. Damit kannst du u.a. auch die Sektorgröße ermitteln und damit die Dateigröße auf die Sektorgröße/Blockgröße aufrunden.

Weder in PB noch in WinAPI gibt es eine Funktion zum Ermitteln der "echten" Größe einer Datei, die auf der Festplatte tatsächlich belegt, aber du kannst das wie oben beschrieben selber ausrechnen. Im Stackoverflow-Forum gibt es ein paar Codes zum Benutzen: https://stackoverflow.com/questions/375 ... le-on-disk

Falls die Datei vom NTFS komprimiert wurde, kannst du sowohl die komprimierte als auch die originale Dateigröße ermitteln: https://www.rsbasic.de/aktualisierung/w ... mitteln.pb
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Antworten