![]() |
StreamDatei öffnen ohne OpenDialog.Execute
Hallo,
ich habe eine StreamDatei gespeichert unter einem Namen, der in einem Edit-Feld eingetragen wurde: pfad := Edit1.Text + '.dat'; Stream := TFileStream.Create(pfad, fmCreate); Ich umgehe so den SaveDialog.Execute. Wenn ich aber aus einer FileListBox den Datensatz auswähle und zurück zu dem Edit-Feld schicke, was muss ich machen, das die dazugehörigen Daten geöffnet werden, ohne OpenDialog.Execute Abfrage? Der umgekehrte Weg funktioniert nicht so wie die Speicherung :-( Hat jemand eine Idee, was ich machen muss? Viele Grüsse Dirk |
Re: StreamDatei öffnen ohne OpenDialog.Execute
Warum sollte der umgekehrte Weg nicht gehen? Wenn der Pfad und Dateiname stimmt, sehe ich da kein Problem.
"Nicht gehen" ist übrigens eine sehr hilfreiche Fehlerbeschreibung. |
Re: StreamDatei öffnen ohne OpenDialog.Execute
Hallo Michael,
warum es umgekehrt nicht funktioniert, weiss ich nicht: meine Procedure wäre (jetzt aus dem Kopf):
Delphi-Quellcode:
Vielleicht siehst Du ja jetzt den Fehler!
dsmax: Maximale Anzahl Datensätze
dsOpen: Datensätze öffnen (Edit1.Text := Feld) pfad := Edit1.Text Stream := TFileStream.Create(pfad, fmOpenRead); Stream.ReadBuffer(dsmax, SizeOf(Word)); for i := dsmax - 1 downto 0 do Stream.ReadBuffer(Daten[i], SizeOf(TDaten); dsOpen; Stream.Free; Bekommst auch im MT ein Bier von mir!!! Dirk [edit=Luckie]Delphi-Tags eingefügt. Beim nächsten mal bitte selber machen. Mfg, Luckie[/edit] |
Re: StreamDatei öffnen ohne OpenDialog.Execute
Du musst eine Struktur angeben als Buffer für ReadBuffer und nicht die Anzahl, die du lesen willst. Und als Größe eben die Größe der Struktur. Dann gehst du die Datei so lange durch und rufst in der Schleife ReadBuffer auf, bist du am Ende der Datei bist.
|
Re: StreamDatei öffnen ohne OpenDialog.Execute
Und wie schreibe ich diese Struktur?
Ich stehe ein wenig auf dem Schlauch! Dirk |
Re: StreamDatei öffnen ohne OpenDialog.Execute
Du musst doch wissen, wie deine Daten aussehen die du lesen willst. Wie schreibst du denn rein?
|
Re: StreamDatei öffnen ohne OpenDialog.Execute
Delphi-Quellcode:
Dirk
procedure TForm1.save1();
var i: integer; pfad: string; begin pfad := Edit1.Text + '.dat'; Stream := TFileStream.Create(pfad, fmCreate); dsSave; Stream.WriteBuffer(dsmax, SizeOf(Word)); for i := dsmax - 1 downto 0 do Stream.WriteBuffer(Daten, SizeOf(TDaten)); Stream.Free, end; |
Re: StreamDatei öffnen ohne OpenDialog.Execute
Und wie sieht Daten aus? Und was steht nachher bei dir in Daten drinne? Und wie äußert sich das "nicht funktionieren"?
Gibt doch einfach mal alle Informationen, die relevant sind. :roll: |
Re: StreamDatei öffnen ohne OpenDialog.Execute
VIelleicht solltest du einfach mal sagen, was denn das Problem ist? Kommt ne Fehlermeldung oder sonstwas? :wall:
|
Re: StreamDatei öffnen ohne OpenDialog.Execute
Der Rest vom Code der wichtig sein könnte
Delphi-Quellcode:
Implementierung
Type TDaten = record; Feld1, Feld1: String[20]; end; var Stream: TFileStream; Daten: array of TDaten; Index: Byte = 0; dsmax: Word = 1; procedure dsSave begin with Daten[Index] do begin Feld1 := Edit1.Text; // bei dsOpen ist es umgekehrt Feld2 := Edit2.TExt; end; end; procedure TForm begin SetLength(Daten, dsmax); end; Wenn ich die Datei in der FileListBox anklicke, wird der DateiName an Edit1 geschickt, der Rest der Felder bleibt leer und es geht nur noch mit Anfang und Fehlermeldung[OK] weiter. Die Fehlermeldung habe ich jetzt leider nicht zur Verfügung. Dirk |
Re: StreamDatei öffnen ohne OpenDialog.Execute
Zitat:
|
Re: StreamDatei öffnen ohne OpenDialog.Execute
Hi!
Zitat:
Und ohne Fehlermeldung wirds für uns schwierig, meine Wahrsagerkugel ist leider grad zu Inspektion :mrgreen: Ciao Frederic |
Re: StreamDatei öffnen ohne OpenDialog.Execute
Der pfad ist nur der String, der sich aus dem Edit.Text Eintrag ergibt!
Die Datei wird dann unter dem Verzeichnis gespeichert, in dem das Delphi Programm steht. Fehlermeldung habe ich deshalb nicht, weil ich nicht zuhause an meinem Rechner bin. Ich dachte auch nicht, dass das so ein Problem wird, den wenn ich den
Delphi-Quellcode:
davor setzte, funktioniert ja alles.
if OpenDialog.Execute = true then begin
Dirk |
Re: StreamDatei öffnen ohne OpenDialog.Execute
Kann es sein, dass ich den pfad irgendwie als FileName angeben muss?
Dirk |
Re: StreamDatei öffnen ohne OpenDialog.Execute
Was willst du mit dem OpenDialog. Es ist doch völlig egal woher der Dateiname bei TFileStream.Create kommt. Machst du etwa sowas TFileStream.Create(OpenDialog1.Filename,...) ? Dann ist es natürlich fatal, wenn du den Dialog nicht vorher aufrufst, da dann Filename nicht gefüllt wird.
Aber du kannst statt OpenDialog1.Filename einfach den Dateinamen übergeben, der in der Listbox ausgewählt wurde. :roll: Sorry, aber so wie du dich hier anstellst, können wir dir nur schwer helfen. Ehrlich gesagt, weiss ich immer noch nicht so recht, wo eigentlich das Problem liegt. |
Re: StreamDatei öffnen ohne OpenDialog.Execute
Zitat:
|
Re: StreamDatei öffnen ohne OpenDialog.Execute
Ich gehe vom Drive-Combo <runter> bis zur FileListBox!
Dirk |
Re: StreamDatei öffnen ohne OpenDialog.Execute
Lösung:
Delphi-Quellcode:
Ereignisse:
procedure save1
begin pfad := extractfilepath(paramstr(0)); pfad := pfad + Edit1.Text + '.dat'; Stream := TFileStream.Create(pfad, fmCreate); ... procedure TForm1.FileListBox1Click(Sender: TObject); var s:string; i: integer; begin s := Filelistbox1.filename; Edit1.text := ExtractfileName(s); Stream := TFileStream.Create(s, fmOpenRead); Stream.ReadBuffer(dsmax, SizeOf(Word)); for i := dsmax - 1 downto 0 do Stream.ReadBuffer(Daten[i], SizeOf(TDaten)); dsOpen; Stream.Free; Stream := nil; end; FileListBox1:OnClick FileListBox1Click |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:41 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