Größe eines Ordners wird falsch ausgelesen
-
Ja die ist ähnlich groß, also der Explorer zeigt bei dem oben gegebenen Bsp. Ordner auch was um die 5,8 GB an. Also der Wert, den mein Algorithmus ermittelt ist um Längen zu klein, wie gesagt schätze ich er übergeht Dateien? Oder was könnte der Grund sein. Der Ordner mit dem ich teste ist übrigens Gothic II, nur zur Information.
nFileSizeLow ist ein DWORD. Der else-Zweig wird niemals erreicht.
Das was du ansprichst stimmt, war ein Logikfehler.
Was wäre der Vorteil statt float, long long zu nehmen?
-
Kevinus schrieb:
wie gesagt schätze ich er übergeht Dateien?
Na dann zähl doch mal die erfassten Dateien in deiner Schleife mit, oder erstell gleich eine Liste und vergleich diese mit der Ausgabe des Betriebssystems.
-
Gute Idee, mir ist auch weiterhin aufgefallen, dass mein Programm bei kleinen Programmen zu viel Speicherplatz berechnet.
-
So das mit der Liste war eine tolle Idee, so ist mir aufgefallen, dass immer der erste Fund jedes Ordners nicht ordnungsgemäß verarbeitet wurde, im Falle von Gothic waren das nun eben die Ordner mit einer Größe von knapp einem GB. Der Algorithmus wurde nun angepasst, jetzt werden annährend die gleichen Werte bei mir, der Systemsteuerung, dem Explorer, FreeCommander und FolderSize, einem Tool für Ordnergrößen im Explorer, angezeigt. Jedes Programm weicht dabei aber etwas ab, dies scheint aber an der Umrechnung, der Auslesemethode und eventuell weiteren Faktoren zu liegen. Ich danke für eure Mithilfe und vor allem für den Denkanstoß von Jansen.
PS:
@witte Nochmal die Frage an dich, was bringt es mir long long zu benutzen, anstatt float. Zweitens, ich habe jetzt eine ordentliche Abfrage für Dateigrößen über 4GB, ohne deine Anmerkung, dass meine Bedingung immer true ist, wäre ich nie darauf gekommen dort etwas zu ändern, danke.
-
Kevinus schrieb:
Jedes Programm weicht dabei aber etwas ab, dies scheint aber an der Umrechnung, der Auslesemethode und eventuell weiteren Faktoren zu liegen.
Kevinus schrieb:
@witte Nochmal die Frage an dich, was bringt es mir long long zu benutzen
Willst Du den Wert nur schätzen oder genau angeben? Ein float hat nur 32b Speicherplatz. Er kann sicherlich große Werte aufnehmen (10^38 oder so), aber dann zu Kosten der Genauigkeit, er nimmt es dann mit den einen oder anderen KByte nicht mehr so genau. long long ist ein ganzahliger Wert mit 64b. Du würdest dann sowas wie wfdFile_info.nFileSizeHigh << 32 + wfdFile_info.nFileSizeLow rechnen. Auf das byte genau.
Das andere Thema: Hast Du den Unterschied zwischen 'Größe' und 'Größe auf dem Datenträger' berücksichtigt?/Edit (wfdFile_info.nFileSizeHigh << 32) + wfdFile_info.nFileSizeLow
-
Wie berücksichtige ich diesen Unterschied?
Jedoch ist es auch so, dass nicht nur meine Methode einen anderen Wert berechnet, jedes der aufgezählten Programme hat einen anderen.
-
Ich wollte nur anmerken, dass geklärt werden muss, was gezählt werden soll. Die Organisation der Ordner im Dateisystem benötigt ja auch Speicher. Schließlich muss ja irgendwo in diesem System vermerkt werden, was in einem Ordner alles drin ist, Benutzerrechte usw. Des weiteren wird ein Dateisystem ja sicherlich in Datenblöcken strukturiert sein, wie auch immer das spezifisch realisiert ist. Dadurch werden Überhänge entstehen, eine Datei benötigt beispielsweise nicht genau drei Blöcke sondern vllt 3 Blöcke und 40b vom vierten Block. Dann muss geklärt werden ob diese 40b zählen oder der gesamte, unvollständig gefüllte, aber belegte Block. Wenn diese Programme nun unterschiedliche Zählphilosophien verwenden entstehen unterschiedliche Größen.
-
Ja das stimmt, wenn man mit Rechts auf einen Ordner klickt sind ja auch beide Werte angegeben. Meine Größe bezieht sich, so glaube ich auf die tatsächliche Dateigröße der gesamten Dateien, nicht wie viel das Programm auf dem Datenträger belegt, denn ich zähle ja nur die Größen der Dateien, nicht z.B. der Ordner. Auch die Verwaltungsdaten zu Benutzerrechten etc. werden von mir nicht ausgelesen, demnach wohl auch nicht berücksichtigt.
-
hi
das 1 kb = 1024 byte wird berücksichtigt?
Nur son GedankewNw
-
Ja wird es.