Entwickler-Ecke
IO, XML und Registry - Genaue (!) Größe einer Datei ermitteln
DJMesche - Do 30.06.11 20:24
Titel: Genaue (!) Größe einer Datei ermitteln
Hallo mal weder Liebe Community :o
Also ich habe eine Frage zu meinem Backup-Programm mit Progressbar...
während mein Programm die zu Backupenden :P Dateien ausließt kummuliert es im Hintergrund für jede Datei
mit
sizelongFileListAll += p_datei.Length; die Dateigröße auf meine Variable.
Hier ist schon das erste Problem da: Length gibt LONG zurück, was ein gerundeter Wert ist :oops:
Da ich am Anfang des Backups den Max-Wert meiner Progressbar auf diese FileSize setze (Filesize/3071 :) )
kommt es später zu einem Fehler, da die Größen, welche durch Length ermittelt werden, zu klein sind.
Während das Programm arbeitet, werden in der Progressbar quasi immer die schon eingelesenen Bytes (durch 3071) angezeigt,
was mich zu einer ziemlich genauen Statusanzeige bringt.
Folgender Sachverhalt:
Ich lese alle Dateien ein und kummuliere auf den long Wert die Größe jeder Datei:
3 Dateien -> 40037296 Bytes
Jetzt werden aber beim Schreiben die reell geschrieben Bytes in der Progressbar grafisch angezeigt
Windows sagt hier:
3 Dateien -> 40051632 Bytes
VIEL zu ungenau, wenns dann mal 30726 Dateien sind :P
Klar könnte ich fix einen Workaround bauen - aber das ist nicht meine Art :P
Deswegen die Frage an euch - keine Workarounds, dafür bin ich zu neugierig :)
Danke :D
//edit
man könnte natürlich über einen Streamreader gehen und da Datei für Datei bis Schluss einlesen und hätte wahrscheinlich die genauen Bytes raus - das ist denke ich aber seeehr Performancelastig (?)
Moderiert von
Kha: Topic aus WinForms verschoben am Do 30.06.2011 um 20:27
Ralf Jansen - Do 30.06.11 23:55
Zitat: |
Hier ist schon das erste Problem da: Length gibt LONG zurück, was ein gerundeter Wert ist |
Häh :gruebel: Long ist ein Ganzzahltyp genau das richtige um eine Dateilänge in Bytes darzustellen. Das sollte also passen. Oder willst du uns sagen das du es geschafft hast Dateien z.B mit nur einem halben Byte zu schreiben und dir dieses halbe Byte fehlt?
Zitat: |
Windows sagt hier:
3 Dateien -> 40051632 Bytes |
Wo sagt Windows das? Dir ist bewusst das die Größe der Datei nicht gleich des belegten Platzes im Dateisystem durch diese Datei ist? Und du bist nicht gerade zufällig dabei das eine mit dem anderen zu vergleichen und wunderst dich das die nicht gleich sind?
DJMesche - Fr 01.07.11 00:06
Der Vergleich war zwischen "tatsächlich belegten Speicherplatz auf Datenträger" und "Datei.length"
Und da sind halt unterschiede da, da Windows mir 2323232,3 Byte ausgeben kann, und long halt nur 23232323 Bytes - oder nicht?
Ich habe gerade das Problem herausgefunden. Ich arbeite in dem Programm mit mehreren Threads.
Das Ding ist, auf meinem DUAL Core mit Win7 läuft das einwandfrei durch und endet bei 100%,
jedoch in meiner virtuellen Maschine, in welcher Windows XP SP3 läuft (VirtualBoy läuft ja auch nur mit einem Kern glaube ich),
rechnet der weiter bis über 200% (Backup-Datei schon größer als tatsächliche Daten).
Kann das mit Threading und Ein-Kern zusammenhängen?! Ich bin verwirrt :)
Aber das mit der Dateigröße interessiert mich trotzdem :)
Danke & Gute Nacht
Ralf Jansen - Fr 01.07.11 00:19
Zitat: |
da Windows mir 2323232,3 Byte ausgeben kann |
Du hast die Frage wo Windows das ausgibt nicht beantwortet. Unabhängig davon 0,3 Byte kann man nicht speichern. Es gehen nur ganze Bytes. Und die Belegen im Dateisystem als Dateien immer vielfache ganzer Blöcke die (im Moment noch) üblichweiser 4 KB groß sind.
DJMesche - Fr 01.07.11 08:44
Hallo und Guten Morgen,
also wenn ich bei windows auf eine Datei in die Eigenschaften gehe: Dann seh ich das ich mir das eingebildet habe :D weil ich eine 600 MB Große Datei angeschaut hatte :o Sorry - aber wieso komme ich trotzdem auf einen niedrigeren Wert, wenn ich einfach die Größen der Dateien mitzähle? (siehe erster Thread)
Wie siehts nun aus mit dem XP-Problem? Eine Idee?
8)
norman2306 - Fr 01.07.11 10:51
weil das Dateisystem von Windows mit Blöcken arbeitet...
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!