Entwickler-Ecke

Dateizugriff - wie kann ich eine Textdatei direkt in einen String laden...?


Henry - Mi 31.07.02 18:18
Titel: wie kann ich eine Textdatei direkt in einen String laden...?
Hallo,

gibt es eine Möglichkeit eine Textdatei direkt in einen String zu laden
und nach der Bearbeitung wieder in eine Datei zu speichern?
Möglichst so einfach wie man es mit z.B. einem TMemo machen kann.

Also wie:

Quelltext
1:
2:
3:
Memo1.lines.SaveFromFile('datei.txt');
//und
Memo1.lines.SaveToFile('datei2.txt');

Dann kann ich mir ein TMemo sparen denn ich brauche es in diesem Fall nicht im Programm
danke für die Hilfe.


GPF - Mi 31.07.02 18:28

Verwende einfach folgenden Code (ohne Fehlerbehandlung; Datei muß beim Lesen existieren, etc..):


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
procedure SaveStringToFile(Filename, SaveString: string);
var fs:TFileStream;
begin
  fs:=TFileStream.Create(Filename, fmCreate or fmShareExclusive  );
  fs.Write(SaveString[1], Length(SaveString));
  fs.Free; 
end;

procedure LoadStringFromFile(Filename: string; var LoadString: string);
var fs:TFileStream;
begin
  fs:=TFileStream.Create(filename, fmOpenRead or fmShareDenyNone);
  SetLength(LoadString, fs.Size);
  fs.Read(LoadString[1], fs.Size);
  fs.Free;
end;


Henry - Mi 31.07.02 18:33

Danke!
Werde es gleich mal ausprobieren


Henry - Mi 31.07.02 22:02

Habe es Probiert.
Funktioniert super, War genau das was ich brauchte.

Danke nochmal


GPF - Do 01.08.02 04:49

Sorry, ein kleiner Fehler hat sich eingeschlichen.
Probleme verursacht die Read-Zeile in der Ladeprozedur wenn die Streamgröße (bzw. hier Stringgröße) 0 Bytes groß ist. In diesem Fall ist nämlich LoadString[1] ungültig.
Die korrigierte Fassung lautet dann wie folgt:


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure LoadStringFromFile(Filename: string; var LoadString: string); 
var fs:TFileStream; 
begin 
  fs:=TFileStream.Create(filename, fmOpenRead or fmShareDenyNone); 
  SetLength(LoadString, fs.Size); 
  if fs.size>0 then   //Diese Abfrage mußte noch rein
    fs.Read(LoadString[1], fs.Size); 
  fs.Free; 
end;


wwerner - Do 01.08.02 06:42

Könntet Ihr diesen Tip in die FAQ eintragen?


Tino - Do 01.08.02 08:37

wwerner hat folgendes geschrieben:
Könntet Ihr diesen Tip in die FAQ eintragen?
Klar kann man das machen! Aber dafür gibt es extra die Sparte Neue Einträge / Hinweise / etc. :shock:. Da kannst Du solche Beiträge gerne einfach hinein posten. Ich hab das jetzt aber schon gemacht :-D

FAQ Eintrag [http://www.auq.de/viewtopic.php?t=1133]

Gruß
TINO