Entwickler-Ecke

Dateizugriff - Probleme mit TFileStream


alex_id - Do 06.02.03 02:26
Titel: Probleme mit TFileStream
Hi
Ich habe folgene Procedure geschrieben jedoch bekomme ich immer eine Fehlermeldung und ich weiß nicht so recht weiter !!!


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
Procedure Form1.Save;
var
   FileS : TFileStream;
 FileName : String;

Begin
   FileName := 'datei.dat';
   Try
     FileS.Create((FileName, fmOpenWrite);
     FileS.WriteBuffer(UserSave, SizeOf(user_daten_save));
   except
      ShowMessage('error');
   end;
   FileS.Free;
End;



Alex


Delete - Do 06.02.03 03:20

Ist ja schön, dass du den Source gepostet hast. Aber warum verschweigst du uns die Fehlermeldung? Ist das ein Geheimnis? :roll:


Quelltext
1:
FileName := 'datei.dat';                    

Wo landet die Datei. Sag jetzt nicht im Programmverzeichnis.


Quelltext
1:
FileS.Create((FileName, fmOpenWrite);                    

Wie viele Klammer öffnest du und wie viele machst du wieder zu?

Was ist UserSave und user_daten_save? :roll:

Setz mal das FileS.Create... vor das try.


AndyB - Do 06.02.03 08:13

Und mach aus

Quelltext
1:
FileS.Create(...                    

folgendes:

Quelltext
1:
FileS := TFileStream.Create(                    


maximus - Do 06.02.03 12:04

nochwas...ich würd ..Create(FileName, fmCreate);
nehmen, da sonst, wenn deine daten mal kürzer sind, die alten noch überlappen.


BungeeBug - Do 06.02.03 14:26

hi ...

vorallem musst du nen Pfad angeben wo die Datei hin soll

Quelltext
1:
   Stream := TFileStream.Create('./lalala.dat', fmCreate);                    


erstellt eine Datei im Prog-Verzeichniss .. ansonsten musst du den gesammten Pfad wo du hin willste angeben ... alles andere für unwillkürlich zu einem Error :)

MfG BungeeBug


Tino - Do 06.02.03 14:42

BungeeBug hat folgendes geschrieben:
erstellt eine Datei im Prog-Verzeichniss

Das glaube ich nicht. Ich denke bei Deiner o. g. Art wird die Datei in dem aktuellen Arbeitsverzeichnis erstellt.

Gruß
TINO


BungeeBug - Do 06.02.03 15:28

ups ... jaja recht du hast ... aber im normal fall is ja das "Prog-Verzeichniss" das "Arbeitsverzeichniss" von daher denk ich das das nicht das Problem da stellen sollte ?!

MfG BungeeBug


Tino - Do 06.02.03 17:41

Davon auszugehen das das Arbeitsverzeichnis gleich dem Programmvezeichnis ist... ist mist! Deshalb sollte man folgendes benutzen um sicher zu sein das die Datei auch im Programmverzeichnis erstellt wird:

Quelltext
1:
 Stream := TFileStream.Create(ExtractFilePath (ParamStr (0)) + '/lalala.dat', fmCreate);                    


Gruß
TINO


alex_id - Do 06.02.03 18:07

Hi Leute

Danke für eure schnelle Hilfe !!!


Quelltext
1:
FileS.Create((FileName, fmOpenWrite);                    

Zitat:
Wie viele Klammer öffnest du und wie viele machst du wieder zu?


-> das war ein Tippfehler da ich mehreres probiert hatte ... sorry

eigentlicher Fehler war das ich nicht das Verzeichtnis mit angegeben hatte !!!! :roll:

Alex
Manchmal übersieht man die kleinen Dinge, die aber von Bedeutung sind :!:


DaRkFiRe - Fr 07.02.03 13:56


Quelltext
1:
     FileS.Create((FileName, fmOpenWrite);                    


meiner meinung nach entsteht dort immer ein Fehler, liegt es doch daran, dass FileS nicht mal initialisiert wurde. mir wäre auch unbekannt, dass delphi schon automatisch alle lokalen variablen vorinitialisiert, sodass das objekt bereits existiert

mein vorschlag:


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
Procedure Form1.Save; 
var 
   FileS : TFileStream; 
FileName : String; 

Begin 
   FileName := 'datei.dat'; 
   Try 
     IF FILEEXISTS(FileName) THEN
       FileS:=TFileStream.Create(FileName, fmOpenWrite)
     ELSE
       FileS:=TFileStream.Create(FileName, fmCreate);
     FileS.Write(UserSave, SizeOf(user_daten_save)); 
   except 
      ShowMessage('error'); 
   end; 
   FileS.Free; 
End;