Entwickler-Ecke
Dateizugriff - Dateigröße bestimmen?
Melanie - So 13.10.02 10:02
Titel: Dateigröße bestimmen?
Also ich möchte in ein Richedit Dateien laden,da die Dateien sehr groß sind ca 10 bis 30 MB dauert das ein bißchen.Darum möchte ich den Ladevorgang mit Hilfe einer Gauge grafisch darstellen.
Wie bestimmt man da die Dateigröße ,über Richedit.lines.count geht das
ja nicht da die Datei sich noch nicht im Richedit befindet?.
Bei den Dateien handelt es sich ausschließlich um Textfiles.
MFG Melly :?
O'rallY - So 13.10.02 18:40
Du könntes vielleicht mittels Stream die Datei step by step einlesen und dann jedesmal die Progressbar aktualisieren. So etwa:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| procedure TForm1.Button1Click(Sender: TObject); var fs: TFileStream; temp: string; i: integer; begin fs := TFileStream.Create('C:\einedatei.txt', fmOpenRead or fmShareDenyWrite); ProgressBar1.Max := fs.size div 1000 + 1; { +1 bewirkt, das die Schleife nicht einmal zu wenig ausgeführt wird, da div rundet} SetLength(temp, 1000); for i := 0 to ProgressBar1.Max do; begin fs.Read(PChar(temp)^, 1000); RichEdit1.Text := RichEdit1.Text + temp; ProgressBar1.Position := i; end; fs.Free; end; |
Es muss natürlich nicht immer nur 1000 genommen werden... :wink:
Hoffe es entspricht deine Vorstellungen.
Delete - So 13.10.02 22:54
Also dein Topic, sagt was anderes, als was du willst. Die dateigröße bekommst du so:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| function MyGetFileSize(const Filename: string): TULargeInteger; var Find: THandle; Data: TWin32FindData; begin Result.QuadPart := -1; Find := FindFirstFile(PChar(Filename), Data); if (Find <> INVALID_HANDLE_VALUE) then begin Result.LowPart := Data.nFileSizeLow; Result.HighPart := Data.nFileSizeHigh; Windows.FindClose(Find); end; end;
procedure TForm1.FormCreate(Sender: TObject); begin Caption := IntToStr(MygetFileSize('c:boot.ini').QuadPart); end; |
Melanie - Do 17.10.02 18:23
Titel: Dateigröße bestimmen
Hallo ,danke erstmal für Eure Antworten.Das bringt mich wieder ein Stück weiter.
MFG Melly :oops:
Emmis - Mi 30.10.02 20:25
Hallo Melanie,
sieh dir mal das Beispiel zu Fileread in der Hilfe an.
Kleine Korrektur im Quellcode: hinter Buffer ein ^ setzen
Quelltext
1:
| iBytesRead = FileRead(iFileHandle, Buffer^, iFileLength); |
Bemerkung am Rande:
Grafiken zur "Beschäftigung" des User bei länger dauernden Operationen sind ganz nützlich, verlangsamen aber ungemein den gesamten Vorgang.
m.f.g. emmis
O'rallY - Mi 30.10.02 22:35
Es ist wissentschaftlich bewiesen, das eine visuelle Fortschrittsanzeige den Prozess zu verkürzen scheint (es kommt einem so vor). Deswegen hat Microsoft bei der XP-Reihe auch so eine Schöne Progressbar beim Booten implementiert. Muss aber zugeben, dass das Paradox klingt: Die Visualiesierung des Progresses verlängert die ihn physisch, verkürtzt ihn aber gleichzeitig psychisch. Doch glaube ich nicht, das bei heutigen Prozessoren die Routine für eine Fortschrittsanzeige gravierend den Prozess verlangsamt.
nur so am Rande :wink:
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!