Entwickler-Ecke

Dateizugriff - Zeiger auslagern, geht das überhaupt???


FatalError - Mo 15.12.03 18:42
Titel: Zeiger auslagern, geht das überhaupt???
:idea:

Hi,

gibt es die Möglichkeit, in Delphi einen Pointer (aus einer Linearen Verkettung z.B.) "auszulagern", sodass der Inhalt des Ponters unverändert nach Neustart des Programms wieder ausgelesen werden kann?
Ich meine jetzt, ohne den Umweg über eine .txt -Datei zu gehen?


gute Grüße
Andy


ErnestoChe - Mo 15.12.03 18:49

Hi,

wohin willst du ihn auslagern? Wenn dein Programm beendet wird ist der Speicherbereich nicht mehr gültig und wird freigegeben. Wieso möchtest du nicht in einer Datei speichern? Es muss ja nicht unbedingt eine Textdatei sein. Da gibt es ja viele Möglichkeiten. Könntest dir auch ein eigenes Dateiformat überlegen.

MFG

- Ernesto -


FatalError - Mo 15.12.03 22:41

Hi,

das mit der Textdatei will ich vermeiden, da ich mir dei gaze Arbeit mit Ausgeben/neu einlesen ersparen will.

Gibt es keine Möglichkeit, innerhalb von Windows selbst irgendwie einen Zeiger auszulagern?

Ansonsten: wie erstellt man ein eigenes Dateiformat und wie speichert/lädt man darin?

Grüße Andy


Delete - Mo 15.12.03 22:53

Das ist das Problem deiner Anwendung, da wird dir Windows nichts abnehmen können.

Was die Dateien angeht, kuck mal nach typisierten Dateien. Eine Klasse mit Demo findest du auch auf meiner Seite im Delphi-Demo Ordner.


ErnestoChe - Mo 15.12.03 22:58

Hi,

Zitat:
das mit der Textdatei will ich vermeiden, da ich mir dei gaze Arbeit mit Ausgeben/neu einlesen ersparen will.


Ach, das ist eigentlich dank TStringList ganz einfach.

Speichern:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
var
  slTextDatei: TStringList;
begin
  slTextDatei := TStringList.Create;
  try
    slTextDatei.Add('Servus');
    slTextDatei.Add('Wie gehts?');
    slTextDatei.Add('Danke, gut');

    slTextDatei.SaveToFile('C:\Servus.txt');
  finally
    slTextDatei.Free;
  end;
end;


Laden:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
var
  slTextDatei: TStringList;
begin
  slTextDatei := TStringList.Create;
  try
    slTextDatei.LoadFromFile('C:\Servus.txt');
    Memo1.Lines.AddStrings(slTextDatei);
      // hier hätte man auch mit Memo1.Lines.LoadFromFile
      // die Datei direkt ins Memo laden können
  finally
    slTextDatei.Free;
  end;
end;


Zitat:
Ansonsten: wie erstellt man ein eigenes Dateiformat und wie speichert/lädt man darin?


Kommt darauf an wie das Format aussehen soll. Hier [http://www.tutorials.delphi-source.de/streams/file002.shtml] mal ein Tutorial mit TFileStream.

MFG

- Ernesto -


Delete - Mo 15.12.03 23:29

Es geht um Zeiger. Aber da sehe ich ein Problem: Sie zeigen ja auf eine Adresse im Speicher. Wer sagt dir, dass die Adresse beim nächsten Start die gleiche ist? Speichere lieber das, was an der Adresse steht.


ErnestoChe - Mo 15.12.03 23:38

Hi,

@Luckie

Das ist wohl klar, das der Wert bzw. die Werte gespeichert werden sollen. Hat ja auch keiner gesagt, dass er die Zeigeradresse speichern soll.

MFG

- Ernesto -


Delete - Di 16.12.03 00:36

ErnestoChe hat folgendes geschrieben:
Das ist wohl klar, das der Wert bzw. die Werte gespeichert werden sollen.

Dem Frgaesteller scheint das nicht so ganz klar zu sein, sonst hätte er nicht explizit nach den Zeigern gefragt.
Zitat:

Hat ja auch keiner gesagt, dass er die Zeigeradresse speichern soll.

Aber ob ihm dann dein Beispiel mit den Strings hilft ist genauso zweifelhaft.


ErnestoChe - Di 16.12.03 08:44

Hi,

das Beispiel sollte anhand einer Stringliste zeigen, dass es einfach ist Textdateien zu schreiben bzw. auszulesen, was ja vom Fragesteller als "viel Arbeit" angesehen wurde. Und was speichert man in einer Textdatei? Wohl Strings, oder? Es gibt in Delphi ja genug Methoden um alle möglichen Datentypen in Strings umzuwandeln.

MFG

- Ernesto -


FatalError - Do 18.12.03 21:11

Hi,

danke für die veilen Ideen und Anregungen;

ihr habt natürlich recht, ich werde auch versuchen ne Textdatei zuu verwenden; Zeiger dierekt speichen sah für mich erste einfacher aus ist es aber wohl nicht...
:roll:

Grüße
Andy