Autor Beitrag
Loki
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 34

Win XP Home

BeitragVerfasst: Sa 27.11.04 22:24 
Hi

Also ich hab da mal ne Frage:

Folgendes in meinem Programm wird am Start geguckt ob eine Ini - Datei existiert und wenn nicht dann mit FileCreate erzeugt. Wenn ich jetz aber wenn das Programm beendet wird drauf zugreifen will krieg ich denn Fehler das er sagt er kann nicht drauf zugreifen. Wenn ich das Programm dann neustarte läuft alles normal. Woher kommt das, dass er nach dem erstellen der Datei nicht sofort drauf zugreifen kann ????

MFG

Loki
greg
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 119

Windows2000, WindowsXP
D5 Prof
BeitragVerfasst: Sa 27.11.04 22:32 
Hallo Loki,

wie erzeugst Du denn die Datei? Es gibt da eine ganze Menge Möglichkeiten.
Gibt es vielleicht irgendeinen Handle, den Du vergessen hast wieder freizugeben? Versuch doch mal die Datei nach dem erzeugen zu schließen und dann mit Deiner Lesroutine drauf zuzugreifen.

Gruß
Gregor
Loki Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 34

Win XP Home

BeitragVerfasst: Sa 27.11.04 22:41 
Danke das hat mich auf die richtige Fährte gebracht und jetzt klappt es :D

Damit Frage beantwortet

P.S. : Hier mal die Lösung falls jemand anderes das Problem auch haben sollte :D

Lösung:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
var hFile : Integer

hFile := FileCreate(Filename);
FileClose(hFile);
tommie-lie
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 4373

Ubuntu 7.10 "Gutsy Gibbon"

BeitragVerfasst: Sa 27.11.04 22:42 
Rufst du nach dem FileCreate() auch schön brav ein FileClose() auf den Rückgabewert auf? Wenn nicht, bitte machen ;-)

Ansonsten: Warum erzeugst du die Datei nicht einfach mit der T(Mem)IniFile-Klasse? Wenn die Datei nicht existiert, müsste sie eigentlich neu angelegt werden...


Edit: Zu spät... ich Schnarchnase...

_________________
Your computer is designed to become slower and more unreliable over time, so you have to upgrade. But if you'd like some false hope, I can tell you how to defragment your disk. - Dilbert
Loki Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 34

Win XP Home

BeitragVerfasst: Sa 27.11.04 22:44 
Also entweder ich hatte an der Stell einen Fehler oder der erzeigt keine neue Datei wenn sie nicht existiert :)
tommie-lie
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 4373

Ubuntu 7.10 "Gutsy Gibbon"

BeitragVerfasst: Sa 27.11.04 22:46 
Loki hat folgendes geschrieben:
Also entweder ich hatte an der Stell einen Fehler oder der erzeigt keine neue Datei wenn sie nicht existiert :)
Ich bin mir nicht sicher, ob TIniFile die Datei erzeugt, ich meine aber, es wäre so. Gut, wenn's nicht so ist, dann muss jedenfalls vorher die Datei wieder geschlossen werden ;-)

Und wenn du dir das Dateihandle sparen willst, geht's kürzer so:FileClose(FileCreate(Filename));

_________________
Your computer is designed to become slower and more unreliable over time, so you have to upgrade. But if you'd like some false hope, I can tell you how to defragment your disk. - Dilbert
Loki Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 34

Win XP Home

BeitragVerfasst: Sa 27.11.04 22:53 
Das ist eine gute Idee das mach ich dann mal so. :D
Syngel Kid
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 61

Win XP
Delphi 2005
BeitragVerfasst: So 28.11.04 14:11 
Loki hat folgendes geschrieben:
Danke das hat mich auf die richtige Fährte gebracht und jetzt klappt es :D

Damit Frage beantwortet

P.S. : Hier mal die Lösung falls jemand anderes das Problem auch haben sollte :D

Lösung:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
var hFile : Integer

hFile := FileCreate(Filename);
FileClose(hFile);


Habe zwar schon lange nicht mehr mit Delphi programmiert, aber ich glaube das geht mit TIniFile einfacher:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
var
  ini: TIniFile;
begin
  ini := TIniFile.Create('Datei.ini');
  ...
  ini.free;
end;


TIniFile erstellt eine Ini, falls sie nicht existiert!
tommie-lie
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 4373

Ubuntu 7.10 "Gutsy Gibbon"

BeitragVerfasst: So 28.11.04 14:18 
Das hatte ich auch schon vorgeschlagen, aber Loki meinte, die Datei wird nicht neu erzeugt ;-)

_________________
Your computer is designed to become slower and more unreliable over time, so you have to upgrade. But if you'd like some false hope, I can tell you how to defragment your disk. - Dilbert
Loser
Hält's aus hier
Beiträge: 8



BeitragVerfasst: So 28.11.04 14:32 
:wave: tommie-lie,

tommie-lie hat folgendes geschrieben:
Und wenn du dir das Dateihandle sparen willst, geht's kürzer so:
ausblenden Delphi-Quelltext
1:
FileClose(FileCreate(Filename));					


Nichts für ungut, aber das halte ich jetzt nicht für eine gute Idee, denn wenn FileCreate, aus welchen Gründen auch immer, fehlschlägt, wird FileClose mit INVALID_HANDLE_VALUE aufgerufen.
Es passiert zwar nichts, aber ich finde es unsauber.

_________________
Ciao
Loki Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 34

Win XP Home

BeitragVerfasst: So 28.11.04 20:55 
Hab das jetzt nochmal getestet. es wird doch eine Datei erzeugt. Also war es doch mein Fehler ;)
tommie-lie
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 4373

Ubuntu 7.10 "Gutsy Gibbon"

BeitragVerfasst: So 28.11.04 21:00 
Loser hat folgendes geschrieben:
[...]wenn FileCreate, aus welchen Gründen auch immer, fehlschlägt, wird FileClose mit INVALID_HANDLE_VALUE aufgerufen.
Es passiert zwar nichts, aber ich finde es unsauber.
Es ist genauso unsauber wie
ausblenden Delphi-Quelltext
1:
2:
3:
4:
var hFile : Integer

hFile := FileCreate(Filename);
FileClose(hFile);
, was von Loki vorgeschlgen wurde, nur ist der Code kürzer und man spart sich eine Dummy-Variable (die doch hoffentlich sowieso wegoptimiert werden würde), von daher hatte ich da keine Bedenken ;-)

Loki hat folgendes geschrieben:
es wird doch eine Datei erzeugt. Also war es doch mein Fehler ;)
Wusst' ich's doch :mrgreen:

_________________
Your computer is designed to become slower and more unreliable over time, so you have to upgrade. But if you'd like some false hope, I can tell you how to defragment your disk. - Dilbert
Syngel Kid
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 61

Win XP
Delphi 2005
BeitragVerfasst: So 28.11.04 21:45 
tommie-lie hat folgendes geschrieben:
Loser hat folgendes geschrieben:
[...]wenn FileCreate, aus welchen Gründen auch immer, fehlschlägt, wird FileClose mit INVALID_HANDLE_VALUE aufgerufen.
Es passiert zwar nichts, aber ich finde es unsauber.
Es ist genauso unsauber wie
ausblenden Delphi-Quelltext
1:
2:
3:
4:
var hFile : Integer

hFile := FileCreate(Filename);
FileClose(hFile);
, was von Loki vorgeschlgen wurde, nur ist der Code kürzer und man spart sich eine Dummy-Variable (die doch hoffentlich sowieso wegoptimiert werden würde), von daher hatte ich da keine Bedenken ;-)

Loki hat folgendes geschrieben:
es wird doch eine Datei erzeugt. Also war es doch mein Fehler ;)
Wusst' ich's doch :mrgreen:


Tommie meinte es wohl so:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
var hFile : Integer  

hFile := FileCreate(Filename);  
if hFile <> 0 then 
  FileClose(hFile)
else
  Showmessage('Datei konnte nicht erstellt werden!');
tommie-lie
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 4373

Ubuntu 7.10 "Gutsy Gibbon"

BeitragVerfasst: So 28.11.04 21:49 
Syngel Kid hat folgendes geschrieben:
Tommie meinte es wohl so:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
var hFile : Integer  

hFile := FileCreate(Filename);  
if hFile <> 0 then 
  FileClose(hFile)
else
  Showmessage('Datei konnte nicht erstellt werden!');
Ich? Nein, ich meinte es so, wie ich geschrieben habe, in einer Zeile ohne Fehlerprüfung, weil Loki auch keine drin hatte, es also stilistisch beides genauso schlecht war, nur meins vom Code her schicker aussah ;-)

_________________
Your computer is designed to become slower and more unreliable over time, so you have to upgrade. But if you'd like some false hope, I can tell you how to defragment your disk. - Dilbert