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: