![]() |
AW: Mehrere Memos in einer Datei Speichern
Zitat:
|
AW: Mehrere Memos in einer Datei Speichern
...und das ganze ein wenig schöner und allgemeiner gehalten:
Speichern:
Delphi-Quellcode:
SaveStrings(fs, [Memo1.Lines, Memo2.Lines, ListBox1.Items]);
Laden:
Delphi-Quellcode:
LoadStrings(fs, [Memo1.Lines, Memo2.Lines, ListBox1.Items]);
Delphi-Quellcode:
const
FILE_SIG = 'MyFileSignature'; BUF_SIZE = 4096; function SaveStrings(AStream: TStream; const Strings: array of TStrings; FileSig: string = ''): Boolean; var Writer: TWriter; i: Integer; begin Result := False; Writer := TWriter.Create(aStream, BUF_SIZE); try if FileSig <> '' then begin Writer.WriteSignature; Writer.WriteIdent(FileSig); end; Writer.WriteListBegin; for i := Low(Strings) to High(Strings) do begin Writer.WriteString(Strings[i].Text); end; Writer.WriteListEnd; Result := True; finally Writer.Free; end; end; function LoadStrings(AStream: TStream; const Strings: array of TStrings; FileSig: string = ''): Boolean; var Reader: TReader; i: Integer; begin Result := False; Reader := TReader.Create(aStream, BUF_SIZE); try if FileSig <> '' then begin Reader.ReadSignature; if Reader.ReadIdent <> FileSig then raise Exception.Create('ungültige Datei...'); end; i := Low(Strings); Reader.ReadListBegin; while not Reader.EndOfList do begin if i <= High(Strings) then Strings[i].Text := Reader.ReadString; Inc(i); end; Reader.ReadListEnd; Result := True; finally Reader.Free; end; end; procedure TForm1.Button1Click(Sender: TObject); var fs: TFileStream; begin fs := TFileStream.Create('C:\MyStrings.txt', fmCreate); try SaveStrings(fs, [Memo1.Lines, Memo2.Lines, ListBox1.Items], FILE_SIG); finally fs.Free; end; end; procedure TForm1.Button2Click(Sender: TObject); var fs: TFileStream; begin fs := TFileStream.Create('C:\MyStrings.txt', fmOpenRead); try LoadStrings(fs, [Memo1.Lines, Memo2.Lines, ListBox1.Items], FILE_SIG); finally fs.Free; end; end; |
AW: Mehrere Memos in einer Datei Speichern
Soweit fuktioniert alles danke. Allerdings Meldet mir das programm einen Fehler sobald ich die datei laden möchte.
Zitat:
EDIT: Hab den Eintrag ", FILE_SIG" in der Button2 Prozedur entfernt und schon funktioniert ist. Wofür ist die FILE_SIG notwendig?? |
AW: Mehrere Memos in einer Datei Speichern
Zitat:
Die Signatur ist ein Schutz: Zitat:
|
AW: Mehrere Memos in einer Datei Speichern
Vielen dank für die kompetente hilfe!!!
Thread kann geschlossen werden! |
AW: Mehrere Memos in einer Datei Speichern
Ich danke euch nochmal sehr für die geleistete Hilfe!
Folgenden Code nutze ich zum speichern.
Delphi-Quellcode:
Ich habe auch ein SaveDialog eingebaut, dass ohne probleme funkltioniert ALLERDINGS:
procedure TRechner.BtSaveClick(Sender: TObject);
var fs: TFileStream; begin PfadSave; if EdDir.Text = '' then begin end else begin fs := TFileStream.Create(EdDir.Text+'.ini', fmCreate); //EdDir ist der Speicherpfad + Dateiname try SaveStrings(fs, [Memo1.Lines, Memo2.Lines], FILE_SIG); finally fs.Free; end; Fall 1. Die Datei ist noch nicht vorhanden -> Dateiname wird eingeben -> Speichern ->> klappt. Fall 1. Die Datei ist vorhanden und soll überschrieben werden -> Datei wird markiert -> Speichern ->> DATEI bist zweimal die gleiche Endung (XX.ini.ini). Im Savedialog habe ich zudem einen filter auf ini gesetzt (Filtername: .ini" und Filter: *.ini) Lösungsversuche 1.)Habe mal im dialog den filter oder ein teil des filter rausgehauen, das ergebniss war, dass nun alle dateien angezeigt wurden und das .ini problem beim überschreiben bestand immernoch. 2.) Savedialogfilter nicht verändert (filter auf .ini usw.). In der prozedur den +'.ini' eintrag entfernt. Ergebnis ->> Datei besitz keine endnung 3.) Per if abfrage FileExists(EdDit.Text+'.ini') then DeleteFile(EdDit.Text+'.ini') else... ->> brachte nichts... Woran kann es liegen? |
AW: Mehrere Memos in einer Datei Speichern
Delphi-Quellcode:
ChangeFileExt(EdDir.Text,'.ini')
|
AW: Mehrere Memos in einer Datei Speichern
Danke!
Aber entweder setze ich es an die falsche stelle oder es klappt nicht :(. Also beim Auswählen der Datei, nimmt EdDir nicht nur den Dateipfad auf sondern auch Dateiname.Dateiendun (C:\test.ini). D.h. Die procedure erkennt nicht dass dort ein .ini bereits vorhanden ist und hängt noch ein dran (C:\test.ini.ini). Folglich bringt ein Delete nichts da beim markieren der pfad + endung ebenfalls an EdDir gegeben wird. Kusios...:( |
AW: Mehrere Memos in einer Datei Speichern
Delphi-Quellcode:
:shock:
Showmessage( ChangeFileExt('C:\test\test.ini','.ini') +#13#10 + ChangeFileExt('C:\test\test.txt','.ini') +#13#10 + ChangeFileExt('C:\test\test','.ini'));
EDIT
Delphi-Quellcode:
fs := TFileStream.Create(ChangeFileExt(EdDir.Text,'.ini'), fmCreate)
|
AW: Mehrere Memos in einer Datei Speichern
Fertig DANKESCHÖN!!
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:13 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz