Autor Beitrag
soisseteben
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 111

Win XP
D7
BeitragVerfasst: Di 19.09.06 17:29 
Hi,
Ich wollt nur noch mal testen wie das den mit den Filestream nochmal war...und jetzt geht hier irgentwie nix mehr. Ich möcht nur nen String in eine Datei speichern. Folgender Code liefert jedoch beim Öffnen "ungültige Zeigeroperation", da anscheinend garnichts gespeichert wird. Wenn ich die Datei im Editor öffne seh ich nur 'n dicken schwarzen Strich :(

ausblenden volle Höhe 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:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
procedure TForm1.saveClick(Sender: TObject);
var Fs: TFileStream;
    Fn: String;
    Text : String;
begin
  SaveDialog1.Execute;
  Fn := SaveDialog1.FileName;
  If FileExists(Fn) Then
    Fs := TFileStream.Create(Fn, fmopenwrite)
  else begin
    if Messagedlg('Die Datei existiert nicht. Möchten sie sie anlegen?', mtConfirmation  , [mbyes, mbno],0) = mryes then begin
      Fs := TFIlestream.Create(Fn, fmcreate);
      Fs.Free;
      Fs := TFileStream.Create(Fn, fmopenwrite);
    end
    else exit;
  end;
  Text := Edit1.Text;  //das klappt natürlich
  Fs.Write(Text, SizeOf(Text));  // aber hier scheint es nicht mehr zu klappen
  Fs.Free;
end;

procedure TForm1.openClick(Sender: TObject);
var Fs: TFileStream;
    Fn: String;
    Text: String;
begin
  OpenDialog1.Execute;
  Fn := Opendialog1.Filename;

  Fs := TFileStream.Create(Fn, fmopenread);
  Fs.Seek(0, SoFromBeginning);
  Fs.Read(Text, SizeOf(Text));
  Fs.Free;

  Label1.Caption := Text;
end;


Vielen Dank schon mal. Ich hoff mal es ist kein Delphi-Bug

soisset
wulfskin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1349
Erhaltene Danke: 1

Win XP
D5 Pers (SSL), D2005 Pro, C, C#
BeitragVerfasst: Di 19.09.06 17:47 
Hallo,

sorry wenn ich das so sagen muss, aber was du nach der Abfrage machst, ist schlechtweg "unelegant". Warum nicht gleich so?
ausblenden Delphi-Quelltext
1:
2:
3:
  if (FileExists('bla') or
                (MessageDlg(bla) = mrYes) then begin
               FS := TFileStream.Create(Fn, fmCreate of fmShareDenyWrite);
Du sparts dir mindestens fünf Zeilen.

Nun zum eigentlichen Problem: Ein String besteht aus einer Zeichenkette mir der Größe in den ersten Bytes. Deshalb kannst du diesen nicht so einfach in eine Datei schreiben. Erst recht weiss ich nicht, was SizeOf für einen Wert gibt.
So geht das Schreiben zum Beispiel (aus dem Kopf:
  FS.Write(S[1], Length(S));Dann weisst du allerdings beim auslesen nicht, wieviel du Auslesen möchtest. Deshalb empfiehlt es sich, zunächst die Länge des Strings zu speichern und danach diesen selber. Das Auslesen geht ähnlich, allerdings musst du daran denken die Größe davor zu setzen.
Ich hoffe du kommst jetzt klar, ich denke das ist nun zu schaffen!

Edit: Boolsche Algebra, korrigiert...

Gruß Hape!

_________________
Manche antworten um ihren Beitragszähler zu erhöhen, andere um zu Helfen.


Zuletzt bearbeitet von wulfskin am Di 19.09.06 19:56, insgesamt 1-mal bearbeitet
soisseteben Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 111

Win XP
D7
BeitragVerfasst: Di 19.09.06 18:38 
Habs noch nicht ausprobiert, aber das Problem ist erkannt. Danke. Aber dein Code funktioniert so nicht, da der Dialog garnicht aufgerufen wird, wenn die Datei nicht existiert.

soisset

Edit: sry für späte antwort

_________________
„Wer nur nach dem Zweck der Dinge fragt, wird ihre Schönheit nie entdecken.“ - (Halldór Laxness)