Entwickler-Ecke

Dateizugriff - Problem mit schreiben von Textdatei


P@u1 - Fr 22.01.10 21:23
Titel: Problem mit schreiben von Textdatei
Hallo,

ich habe ein Delphi-Programm geschrieben, was unter anderem etwas in eine Datei schreibt.
Leider gibt es ein Problem: Fast alles wird geschrieben, aber die letzten paar Zeilen kommen einfach nicht.
Hier der Code:


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:
procedure TfrmMain.Button3Click(Sender: TObject);
var
Datei : Textfile;
  i: Integer;
begin
  AssignFile(Datei,Path+'\config.txt');
  Rewrite(Datei);

  for i := 1 to 16 do
  begin
    if i<10 then
    begin
      writeln(Datei,'//'+RadioGroup1.Items[i-1]);
      writeln(Datei,'0'+inttostr(i)+'ox:'+inttostr(Start[i].X));
      writeln(Datei,'0'+inttostr(i)+'oy:'+inttostr(Start[i].Y));
      writeln(Datei,'0'+inttostr(i)+'ux:'+inttostr(Finish[i].X));
      writeln(Datei,'0'+inttostr(i)+'uy:'+inttostr(Finish[i].Y));
    end
    else
    begin
      writeln(Datei,'//'+RadioGroup1.Items[i-1]);
      writeln(Datei,inttostr(i)+'ox:'+inttostr(Start[i].X));
      writeln(Datei,inttostr(i)+'oy:'+inttostr(Start[i].Y));
      writeln(Datei,inttostr(i)+'ux:'+inttostr(Finish[i].X));
      writeln(Datei,inttostr(i)+'uy:'+inttostr(Finish[i].Y));
    end;
  end;

end;


In der Datei die rauskommt ist zuerst alles richtig und sieht ungefähr so aus:
01ox:336
01oy:52
01ux:418
01uy:92
...

und die untersten 2 Zeilen sind:
15ox:669
15oy:


da hört es dann einfach auf, obwohl noch mehr kommen müsste!
Ich habe auch sichergestellt, das die Variablen die dafür verwendet werden belegt sind!
Ich kann es mir nicht erklären, ich hoffe das ihr es könnt :D

Vielen Dank schonmal!


Moderiert von user profile iconNarses: Topic aus Sonstiges (Delphi) verschoben am Fr 22.01.2010 um 23:44


P@u1 - Fr 22.01.10 22:17

ok, habs selbst behoben.
Hab einfach noch closefile dahinter geschrieben.
Ich versteh zwar nicht warum man das braucht, das hat aber geholfen


Tilman - Fr 22.01.10 22:22

Also man sollte Dateien wenn man fertig ist immer schließen, weil sonst andere Programme nicht darauf zugreifen können. In dem Fall könnte es daran liegen dass die Daten noch im Cache lagen und noch nicht wirklich in die Datei geschrieben worden sind, keine Ahnung ob das stimmt aber wär möglich.

//edit
Könnte man übrigens auch mit ner Typisierten Datei machen, hat den Nachteil dass die Datei anschließend nicht über einen normalen Texteditor angezeigt / geändert werden kann. Solltest du das wünschen wäre vermutlich eine INI-Datei die bessere Lösung.

Aus dem Kopf und daher ungetestet:

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:
procedure ...
type tIrgendwelcheDaten = packed record
  Start: tPoint;
  Finish: tPoint;
  ikleinerZehn: Boolean;
end;

var
  datei: file of tIrgendwelcheDaten;
  daten: tIrgendwelcheDaten;

begin
  AssignFile(Datei,Path+'\config.txt');
  Rewrite(Datei);
  
    if i<10 then
    begin
      daten.Start := Start[i];
      daten.Finish := Finish[i];
      daten.ikleinerzehn := true;
      write(Datei,Daten);
    end else [..]

  CloseFile(Datei);


Xion - Sa 23.01.10 00:25

Wenn dann würde ich das über eine TIniFile speichern

Tutorial dazu: http://www.kuknet.de/tutorial1.pdf

Sehr praktisch, aber auch langsam bei größeren Datenmengen