Autor Beitrag
marcs
Hält's aus hier
Beiträge: 7

Win XP Pro, Suse Linux 9.0
D6 Pro
BeitragVerfasst: Fr 20.08.04 23:29 
Hallo,

ich habe ein Programm geschrieben, bei dem auf Dateien in einem bestimmten Ordner zugegriffen wird, um zu verhindern, dass jemand anderes mit dem Programm aus dem Netzwerk auf die Dateien in diesem Ordner zugreift, wird eine Datei erstellt (Dump.txt).
Das Programm sucht nach dieser Datei und wird diese gefunden gibt es eine Fehlermeldung, dass man nicht auf die Dateien zugreifen kann.
Bis dahin funktioniert auch alles, aber nach Beendigung des Zugriffs auf diesen Ordner soll die Datei wieder gelöscht werden, was aber nicht funktioniert.
Zum Erstellen der Datei benutze ich:

ausblenden Quelltext
1:
if NOT FileExists(DumpFile) then FileCreate(DumpFile)					


Danach mache ich nichts weiter mit der Datei, ich greife nicht auf sie zu, oder sonst irgendeine Aktion.
zum löschen benutze ich:

ausblenden Quelltext
1:
if FileExists(DumpFile) then DeleteFile(DumpFile)					


aber es passiert gar nichts.
Wenn ich im Explorer versuche die Datei manuell zu löschen, bekomme ich eine Fehlermeldung, die Datei wird anscheinend vom Programm benutzt.
Weiß jemand woran das liegen könnte?

P.S. mit Erase() funktioniert es auch nicht

Danke im vorraus
bobby
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 25

Win XP
D7 Prof
BeitragVerfasst: Sa 21.08.04 02:16 
I had also situations where FileExist didn't worked so I did it this way:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
var
  DebugLogFile: string;
begin
  DebugLogFile := FileSearch('debug.log',
    ExtractFilePath(Application.EXEName));
  if DebugLogFile <> '' then
    DeleteFile('debug.log');
end;


Did you set the folder where to search before search because app will search in last used folder. If you did open any file from other folder from within your app, that folder becomes current folder.
Use Setcurrentdir function to set the folder where to search.
hansa
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: Sa 21.08.04 02:37 
Wenn sie sich schon nicht im Explorer löschen läßt, dann ist doch was faul. Kriegst Du sie da gelöscht, dann kann man mal in Delphi weiter machen, vorher aber nicht.

_________________
Gruß
Hansa
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 21.08.04 05:48 
Schließt du auch irgendwo die Datei wieder bevor du sie löscht?
Aus der sagenumwobenen Hilfe:
Zitat:

If the return value is positive, the function was successful and the value is the file handle of the new file.

Und so lange das noch offen ist, gilt die Datei für Windows als in Benutzung und kann nicht gelöscht werden.
marcs Threadstarter
Hält's aus hier
Beiträge: 7

Win XP Pro, Suse Linux 9.0
D6 Pro
BeitragVerfasst: Sa 21.08.04 09:30 
bobby: Die Variable DumpFile enthält eine komplette Pfadangabe und nicht nur den Dateinamen

Luckie hat folgendes geschrieben:
Schließt du auch irgendwo die Datei wieder bevor du sie löscht?


Wenn ich versuche die Datei zu schließen mit FileClose oder CloseFile bekomme ich eine E/A-Fehlermeldung, mir wird gesagt, dass die Datei nicht offen ist.
Außerdem erstelle ich die Datei nur und versuche sie später wieder zulöschen, ich greife nicht auf sie zu.
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 21.08.04 13:42 
Zitat:

Wenn ich versuche die Datei zu schließen mit FileClose oder CloseFile bekomme ich eine E/A-Fehlermeldung, mir wird gesagt, dass die Datei nicht offen ist.
Außerdem erstelle ich die Datei nur und versuche sie später wieder zulöschen, ich greife nicht auf sie zu.


Auch das Erstellen öffnet sie. Hier der Beweis:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure TForm1.Button1Click(Sender: TObject);
var
  hFile: THandle;
begin
  hFile := FileCreate('d:\test.prn');
  DeleteFile('d:\test.prn');
  ShowMessage(SysErrorMessage(GetLastError));
end;

Fehlermeldung:
Zitat:

---------------------------
Project1
---------------------------
Der Prozess kann nicht auf die Datei zugreifen, da sie von einem anderen Prozess verwendet wird
---------------------------
OK
---------------------------


Und korrekt:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure TForm1.Button1Click(Sender: TObject);
var
  hFile: THandle;
begin
  hFile := FileCreate('d:\test.prn');
  FileClose(hFile);
  DeleteFile('d:\test.prn');
  ShowMessage(SysErrorMessage(GetLastError));
end;

Was sagt Showmessage dazu:
Zitat:

---------------------------
Project1
---------------------------
Der Vorgang wurde erfolgreich beendet
---------------------------
OK
---------------------------



Und misch um Gottes Willen keine Pascal Dateiroutinen mit Windows Routinen. Zu FileCreate gehört ein Filelose.

Ich vermute dein problem liegt an einer ganz anderen Stelle. Und zwar erstellst du in einer Routine die Datei und in einer anderen versuchst du sie zu löschen. Oder du benutzt irgendwie globale Variablen und hast etwas die Übersicht verloren., wo was wie von was geänderet wird.