Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Herausfinden, ob bestimmte Datei noch geöffnet ist. (https://www.delphipraxis.net/76180-herausfinden-ob-bestimmte-datei-noch-geoeffnet-ist.html)

Alloc 31. Aug 2006 02:47


Herausfinden, ob bestimmte Datei noch geöffnet ist.
 
Hallo,

ich habe hier in einem Projekt das Problem, das eine Datei aus einer Datenbank extrahiert wird und dann mit dem Verknüpften Programm geladen wird. Dabei kann der Dateityp so ziemlich alles sein, zZt aber eher noch txt, bmp, jpg und die diversen M$ Office Formate. Nun müsste ich herausfinden, wann die jeweilige Datei nicht mehr von dem Programm geöffnet ist, damit ich diese dann wieder in die Datenbank zurückschreiben kann.

Meine Ideen sind folgende:

1. (wäre IMHO die optimalste) Ich kann irgendwie rausbekommen, ob irgendein Programm die Datei geöffnet hat. Bei meinen Suchen hier im Forum bin ich aber eigentlich nur auf negative antworten gestoßen, also dass man dafür KernelMode-Treiber braucht um an die FileHandles zu kommen. Wenn da jmd was weis wäre es natürlich genial ;)

2. Ich "starte" die Datei mit ShellExecute und warte bis das Programm geschlossen wurde. Nachteil: Wenn zum Beispiel eine Word-Datei geöffnet wurde und dann in Word noch eine ganz andre (für mich uninteressante Datei) geladen hat, nützt es nichts wenn er die Word-Datei meines Programmes schließt, da Word ja noch offen ist. Vorteil: Es läuft mit quasi allen Dateitypen.

3. Ich suche in der Registry das Programm raus, das mit dem jeweiligen FileType verknüpft ist und handle dementsprechend, zB bei Word über eine OLE-Verbindung und frage zyklisch ab, ob das File noch offen ist. Nachteil: Ich muss für jeden zu verwendenden Dateityp vorher wissen, wie das Programm zu handlen ist.

4. Ich gebe dem Nutzer eine MessageBox die er bestätigen soll, wenn er fertig ist :mrgreen:

Weitere Vorschläge, Hinweise, Lösungsansätze (besonders zu Punkt 1 natürlich) wären mir sehr willkommen :P

Grüße.
Chris

verwirrt 31. Aug 2006 03:41

Re: Herausfinden, ob bestimmte Datei noch geöffnet ist.
 
Hallo,

wie das programmatisch zu bewerkstelligen ist, weiß ich nicht.

Dennoch 2 Anregungen:

1. Sofern das Programm nur auf Windows XP (ich weiß nicht, ob's auch in der Home Edition enthalten ist)/2003 läuft, kannst du das integrierte openfiles verwenden, wobei zur Berücksichtigung lokal geöffneter Dateien erst

openfiles /Local ON

ausgeführt werden müsste, gefolgt von einem Neustart.

Wie man an die Ausgabe von Commands im Kommandozeilenfenster gelangt, ist hier im Forum/in der Code Library irgendwo zu finden.


2. Ein Programm namens PsFile,

http://www.sysinternals.com/Utilities/PsFile.html

Ich weiß allerdings nicht, ob hier auch lokal geöffnete Dateien berücksichtigt werden (bei net file ist das ja nicht der Fall). Auf der Site steht, dass es die Net API verwendet und dass dieses im Plattform SDK dokumentiert wäre.

Gruß

Alloc 31. Aug 2006 04:02

Re: Herausfinden, ob bestimmte Datei noch geöffnet ist.
 
Hi verwirrt,

Punkt 1 würde ich mal prinzipiell 'nein' sagen. W2k sollte auf alle fälle drin sein und 98 wäre sehr gut (das Programm muss in meiner alten Schule laufen, und die haben da meisstens 2k, aber auch 98).

PsFile hab ich auch schon gesehen, leider zeigt mir dass nur entfernt geöffnete Dateien. Der ProcessExplorer kann zwar geöffnete Files von Programmen anzeigen, allerdings benutzt der wenn ich mich recht erinnere einen speziellen eigenen Treiber im KernelCode.

Chris

verwirrt 31. Aug 2006 12:44

Re: Herausfinden, ob bestimmte Datei noch geöffnet ist.
 
Hallo,

vielleicht bringt dich das weiter, allerdings lässt sich so nicht entnehmen, welchen Prozess das betrifft:

http://www.delphipraxis.net/internal...ght=ge%F6ffnet

Generell könnte man etwas mit der Datei tun (zum Schreiben öffnen) und abfangen, ob das geht oder nicht, so ermitteln, ob sie geöffnet ist (z.B. Try... Except).

Gruß

Alloc 31. Aug 2006 13:14

Re: Herausfinden, ob bestimmte Datei noch geöffnet ist.
 
Auch shcon gesehen *g*

Problem ist halt, dass das nur mit Dateien geht, die durch das öffnen gesperrt werden. Viele kleinere Programme machen das aber (leider) nicht. Notepad oder Paint zB.
Aber schonmal Danke für die schnellen Antworten =)

Gruß,
Chris


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:01 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz