Autor |
Beitrag |
hibbert
      
Beiträge: 1007
WinServer2003, Win XP, Linux
D6 Pers, D05
|
Verfasst: Mi 05.11.03 16:51
Hi,
mist, ich habe mal wieder was vergessen und zwar will ich ne abfrage machen, ob die datei schon ausgeführt wurde bzw. ob die Datei von Windows schon benutzt wird.
Da war mal was mit if file danbn irgendwas mit is in use (oder so) und dass der Pfad der datei.
Wer kann mir auf die sprünge helfen?
thx hibbert.
_________________ I kunnen väl svara endast ja eller nej
Om i viljen eller nej
|
|
bIce
      
Beiträge: 55
|
Verfasst: Mi 05.11.03 19:28
Willst Du prüfen ob eine Datei von Windows gerade benutzt wird, oder? Wenn ja verwende einfach FileAge(), wenn die Datei gesperrt ist kommt es zu einer Exception (zumindest unter Win98).
Eine mögliche Funktion wäre:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| function fileInUse(filePath: String) : Boolean; begin Result := false; try FileAge(filePath); except Result := true; end; end; |
_________________ Gott mag anscheinend einfache Leute, denn er hat viele von ihnen erschaffen.
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mi 05.11.03 20:14
Wird aber nur funktionieren, wenn die Datei exklusiv geöffnet ist.
|
|
hibbert 
      
Beiträge: 1007
WinServer2003, Win XP, Linux
D6 Pers, D05
|
Verfasst: Do 06.11.03 00:00
naja, vielleicht habe ich mich ja oben etwas falsch ausgedrückt, ich meinte ob eine Datei verwendet wird (nicht speziell von Windows). egal, ob sie in einem Texteditor oder von einem anderen Programm geöffnet bzw. benutzt wird.
ich meine da gab bzw. gibt es so was if fileisinuse oder so ähnlich.
thx hibbert
_________________ I kunnen väl svara endast ja eller nej
Om i viljen eller nej
|
|
bIce
      
Beiträge: 55
|
Verfasst: Fr 07.11.03 20:41
IMO ist das unmöglich, die Datei wird ja einfach eingelesen und geschlossen, im Arbeitsspeicher ist dann ein Abbild der Datei, dass Du mit dem Editor verändern kannst. Ich weiß nicht wie das mit Notepad aussieht aber mit den Edit-Komponenten (auch TMemo, TRichEdit und TSynEdit) funktionieren so. D.h. man kann nur während die Datei gespeichert, bzw. gelesen wird, festestellen ob auf sie zugegriffen wird.
_________________ Gott mag anscheinend einfache Leute, denn er hat viele von ihnen erschaffen.
|
|
Jörg Oulabi
Hält's aus hier
Beiträge: 7
Win XP
D5 Pers, D6 Pers
|
Verfasst: So 09.11.03 02:09
Hi...
Also... ich hatte da gleiche Problem.
Erst musste ich eine Datei schreiben und diese dann gleich danach wieder öffnen um sie weiter zu bearbeiten. Das Problem war, das die zuerst erzeugte Datei ziemlich gross und sie wurde mit der Abfrage "fileexists" schon erkannt bevor sie wieder geschlossen wurde. Ein zu schneller Zugriff bevor die Datei fertig geschrieben und geschlossen wurde führte dann zu einer Exception.
Ich hab das Problem dann so gelöst:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| repeat Application.ProcessMessages; AssignFile(in_datei, 'c:\odas\ges_export.txt'); {$I-} reset(in_datei); {$I+} f:=IoResult; until f=0; CloseFile(in_datei); |
Beste Grüsse
Jörg
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 10.11.03 14:01
Titel: Wie wär's damit?
Hallo!
Wie wäre es mit folgendem Sourcecode von Scalabium.com:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| function FileInUse(FileName: string): Boolean; var hFileRes: HFILE; begin Result := False; if not FileExists(FileName) then exit; hFileRes := CreateFile(PChar(FileName), GENERIC_READ or GENERIC_WRITE, 0, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); Result := (hFileRes = INVALID_HANDLE_VALUE); if not Result then CloseHandle(hFileRes); end; |
Die vorher von Jörg angegebene Methode funktioniert ähnlich, aber ich finde das so am besten, vor allem weil die Fehlerbehandlung, die bei Jörg abgeschaltet wurde, dort von der Funktion intern übernommen wird.
Gruß,
S.J.
|
|
|