Entwickler-Ecke

Dateizugriff - Alle Textdateien vom ordner im Record speichern?


bruce185 - So 08.02.09 21:44
Titel: Alle Textdateien vom ordner im Record speichern?
Hallo,
ich möchte von einem bestimmten Ordner alle Textdateien im Record speichern, also nur den Inhalt der Textdateien.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
type
  TTextFile = record
  FileName: string;
  Text: string;
end;

var
  Form1: TForm1;
  TextFile: array of TTextFile;



Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure TForm1.Button2Click(Sender: TObject);
var
  i: integer;
begin
  i := 1;
  SetLength(TextFile,i);
  TextFile[i-1].FileName := 'Dateiname der Textdatei';
  TextFile[i-1].Text := 'Den Inhalt der Textdatei';
end;


Die Variable i wird später als Zählvariable benutzt, ich weiss nur nicht, wie ich alle Textdateien von einem Ordner auslesen kann.

Ich bedanke mich schonmal im Voraus.

EDIT: Ich hab das so gelöst:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
procedure ListFileDir(Path: string);
var
  SR: TSearchRec;
  i: integer;
  Text: TStringList;
begin
  Text := TStringList.Create;
  if FindFirst(Path + '*.txt', faAnyFile, SR) = 0 then
  begin
    repeat
      if (SR.Attr <> faDirectory) then
      begin
        i := i + 1;
        SetLength(TextFile,i);
        TextFile[i-1].FileName := SR.Name;
        Text.LoadFromFile(Path+TextFile[i-1].FileName);
        TextFile[i-1].Text := Text.Text;
      end;
    until FindNext(SR) <> 0;
    FindClose(SR);
  end;
  Text.Free;
end;


Den rest schaffe ich auch noch.

EDIT 2: Ich habe mal versucht über TStringList über 15000 Texte im Array zu Speichern, also über LoadFromFile u.s.w. und dann sagt mein Programm: Zu wenig Arbeitsspeicher.

Gibt es vieleicht eine bessere möglichkeit?

MfG


jaenicke - So 08.02.09 22:33
Titel: Re: Alle Textdateien vom ordner im Record speichern?
user profile iconbruce185 hat folgendes geschrieben Zum zitierten Posting springen:
EDIT 2: Ich habe mal versucht über TStringList über 15000 Texte im Array zu Speichern, also über LoadFromFile u.s.w. und dann sagt mein Programm: Zu wenig Arbeitsspeicher.

Gibt es vieleicht eine bessere möglichkeit?
Ja. Sowas nicht machen...

Was erwartest du denn bei 15.000 Texten? Wenn die dann jeweils auch nur 10 Kibibyte groß sind, dann hast du schon 150 Mebibyte, und wenn die noch größer sind entsprechend mehr. Wie viel ist es denn bei dir?
Und wie viel Speicher braucht das Programm bevor die Meldung kommt?

Wenn du dann noch jedes Mal mit SetLength das Array um 1 vergrößerst, das komplette Array also jedes Mal kopierst...