Entwickler-Ecke
Dateizugriff - wird die datei benutzt?
hibbert - Mi 05.11.03 16:51
Titel: wird die datei benutzt?
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.
bIce - 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; |
Delete - Mi 05.11.03 20:14
Wird aber nur funktionieren, wenn die Datei exklusiv geöffnet ist.
hibbert - 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
bIce - 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.
Jörg Oulabi - So 09.11.03 02:09
Titel: Re: wird die datei benutzt?
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 - 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.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!