Autor Beitrag
P@u1
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 117



BeitragVerfasst: Fr 22.01.10 21:23 
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:

ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 117



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1405
Erhaltene Danke: 51

Win 7, Android
Turbo Delphi, Eclipse
BeitragVerfasst: 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:
ausblenden 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);

_________________
Bringe einen Menschen zum grübeln, dann kannst du heimlich seinen Reis essen.
(Koreanisches Sprichwort)
Xion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: Sa 23.01.10 00:25 
Wenn dann würde ich das über eine TIniFile speichern

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

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

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)