AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Herausfinden, ob bestimmte Datei noch geöffnet ist.
Thema durchsuchen
Ansicht
Themen-Optionen

Herausfinden, ob bestimmte Datei noch geöffnet ist.

Ein Thema von Alloc · begonnen am 31. Aug 2006 · letzter Beitrag vom 31. Aug 2006
Antwort Antwort
Alloc

Registriert seit: 18. Apr 2005
Ort: Griesheim
167 Beiträge
 
Delphi 2006 Professional
 
#1

Herausfinden, ob bestimmte Datei noch geöffnet ist.

  Alt 31. Aug 2006, 03:47
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

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

Grüße.
Chris
Christian Illy
ONI2.net, basicly every important link about Oni.
  Mit Zitat antworten Zitat
verwirrt

Registriert seit: 9. Jun 2006
59 Beiträge
 
Delphi 6 Professional
 
#2

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

  Alt 31. Aug 2006, 04:41
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ß
  Mit Zitat antworten Zitat
Alloc

Registriert seit: 18. Apr 2005
Ort: Griesheim
167 Beiträge
 
Delphi 2006 Professional
 
#3

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

  Alt 31. Aug 2006, 05:02
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
Christian Illy
ONI2.net, basicly every important link about Oni.
  Mit Zitat antworten Zitat
verwirrt

Registriert seit: 9. Jun 2006
59 Beiträge
 
Delphi 6 Professional
 
#4

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

  Alt 31. Aug 2006, 13:44
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ß
  Mit Zitat antworten Zitat
Alloc

Registriert seit: 18. Apr 2005
Ort: Griesheim
167 Beiträge
 
Delphi 2006 Professional
 
#5

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

  Alt 31. Aug 2006, 14:14
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
Christian Illy
ONI2.net, basicly every important link about Oni.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:26 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