Autor Beitrag
DJMesche
Hält's aus hier
Beiträge: 11



BeitragVerfasst: Do 30.06.11 20:24 
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 user profile iconKha: Topic aus WinForms verschoben am Do 30.06.2011 um 20:27
Einloggen, um Attachments anzusehen!
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 11



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 11



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 222
Erhaltene Danke: 16

Win XP, Win 7 64-Bit
C# 4.0 (VS2010)
BeitragVerfasst: Fr 01.07.11 10:51 
weil das Dateisystem von Windows mit Blöcken arbeitet...