Entwickler-Ecke

Dateizugriff - TTimer und TFilestream


Arne - Mo 22.11.10 11:16
Titel: TTimer und TFilestream
Moin zusammen,

ich habe Code, der mittels einer TTimer Komponente in Delphi 2007 periodisch (einmal je Sekunde) aufgerufen wird. Dieser Code simuliert eine Maschine mit ihren Aktorstellungen (on/off). Nun möchte ich diese Aktorstellungen sekündlich in eine CSV Datei schieben. Und hier fängt das Problem an: im Debugger springt er mir über meine Zeile zum Wegschreiben einfach drüber - führt sie nicht aus.

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
var
  myFileData : String;
begin
  if myFileStream <> nil then begin
    myFileData := ...
    myFileStream.WriteBuffer(PChar(myFileData)^, Length(myFileData)); { diese Zeile überspringt der Debugger einfach und geht direkt zum letztn end! }
  end;
end;


Packe ich Code zum Öffnen und testweise Beschreiben mit einer Zeile in Form.Create() (also bevor TTimer gestartet wurde), so schreibt er in die Datei. Schreibe ich aus der OnTimer Routine in die Datei, so landet nichts im File, bzw. er springt mir über die Write() Zeile. Geöffnet wird die Datei ebenfalls im OnTimer-Code. Das myFilestream.Free passiert auch in OnTimer-Code. Auch nach Ausführen des Free wird die Datei nicht einmal angelegt.

Darf ich aus der OnTimer Routine nicht in TFilestreams schreiben?

thanx, Arne


Delete - Mo 22.11.10 12:28

Und wo ist der Konstruktor vom myFilestream?


Arne - Mo 22.11.10 13:53

Wenn ich im Konstruktor einen festen Pfad vorgebe


Delphi-Quelltext
1:
myFileStream.TFileStream.Create('D:\actors.csv', fmCreate);                    

dann funktioniert es.
Aber mit

Delphi-Quelltext
1:
myFileStream.TFileStream.Create('actors.csv', fmCreate);                    

oder

Delphi-Quelltext
1:
myFileStream.TFileStream.Create('.\actors.csv', fmCreate);                    

funktioniert es nicht.


Delete - Mo 22.11.10 14:34

Argh!!! Wie oft wird hier gepredigt absolute Pfade zu verwenden? Bestimmt bei jedem Thread, in dem es um das Lesen oder Schreiben von Dateien geht. Spricht sich dass denn nie mal rum?


Martok - Mo 22.11.10 14:50

user profile iconLuckie hat folgendes geschrieben Zum zitierten Posting springen:
Argh!!! Wie oft wird hier gepredigt absolute Pfade zu verwenden? Bestimmt bei jedem Thread, in dem es um das Lesen oder Schreiben von Dateien geht. Spricht sich dass denn nie mal rum?

Wie oft wird hier gepredigt, kein GOTO zu verwenden?
Wie oft wird hier gepredigt, dass man nicht auf true (oder false) vergleicht?

Siehst, worauf ich hinaus will? :roll:


elundril - Mo 22.11.10 14:59

user profile iconMartok hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconLuckie hat folgendes geschrieben Zum zitierten Posting springen:
Argh!!! Wie oft wird hier gepredigt absolute Pfade zu verwenden? Bestimmt bei jedem Thread, in dem es um das Lesen oder Schreiben von Dateien geht. Spricht sich dass denn nie mal rum?

Wie oft wird hier gepredigt, kein GOTO zu verwenden?
Wie oft wird hier gepredigt, dass man nicht auf true (oder false) vergleicht?

Siehst, worauf ich hinaus will? :roll:


Auf die Wiedereinführung der Prügelstrafe?


matze - Mo 22.11.10 16:33

mal abgesehen davon ist der gepostete Code doch eh falsch.
Was sollen die vielen Punkte? Müssten da nicht eher := hin?


Delete - Mo 22.11.10 16:42

Das sollen wohl Auslassungszeichen sein.


jaenicke - Mo 22.11.10 16:44

user profile iconArne hat folgendes geschrieben Zum zitierten Posting springen:
Wenn ich im Konstruktor einen festen Pfad vorgebe
Statt eines festen Pfades wäre wie schon gesagt ein absoluter sinnvoll:
http://www.delphi-library.de/viewtopic.php?p=499701

@user profile iconLuckie: er meint die:
user profile iconArne hat folgendes geschrieben Zum zitierten Posting springen:

Delphi-Quelltext
1:
myFileStream.TFileStream.Create('D:\actors.csv', fmCreate);