Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Vérifier si un fichier est déjà ouvert

4 réponses
Avatar
Philippe Halet
Bonjour,

J'aimerais connaître un moyen de vérifier si un fichier est déjà ouvert dans
les sessions en cours sur la machine locale et si oui par quelle
application?

Le problème est simple mais la solution l'est bien moins semble-t-il!

Merci pour votre aide...

Philippe

4 réponses

Avatar
Patrick Philippot
Philippe Halet wrote:
J'aimerais connaître un moyen de vérifier si un fichier est déjà
ouvert dans les sessions en cours sur la machine locale et si oui par
quelle application?



Bonjour,

La question n'est pas très claire: "par quelle application?".

Vous voulez vérifier par programme ou via un utilitaire? Dans ce dernier
cas: http://www.sysinternals.com/ | Process Explorer.

--
Patrick Philippot - Microsoft MVP
MainSoft Consulting Services
www.mainsoft.fr
Avatar
Philippe Halet
Bonjour,

Je vais tenter de m'expliquer avec un peu plus de détail...

J'aimerai dans le cadre d'une application en cours de développement, savoir
si le fichier c:monrépertoiremonfichier.doc est actuellement ouvert. De
manière à rendre le message destiné à l'utilisateur plus clair, j'aimerai
savoir que c'est avec MicroSoft Word (le cas d'un fichier .doc est un peu
idiot, un fichier jpeg est plus critique) afin de dire à l'utilisateur que:
"L'opération sur le fichier monfichier.doc est impossible car il est
actuellement en édition dans MicroSoft Word".

Je dis que l'exemple du .doc est idiot car:
1. Dans 99% des cas (en environnement professionnel peut être plus encore)
un fichier .doc est édité avec Word (dans ce cas il suffit donc de vérifier
si le fichier est locké ou non).
2. Lorsque le fichier .doc est ouvert, il est locké de manière à ne pas
pouvoir l'éditer à plusieurs en même temps: ce n'est pas le cas d'un fichier
jpeg ou txt par exemple.

Donc, en définitive, j'aimerai pouvoir identifier pour un fichier donné:
- s'il est ouvert (et éventuellement par quel user? ...il peut avoir été
ouvert dans une autre session);
- le nom de l'application par laquelle il est actuellement ouvert (ça c'est
pour faire plus joli).

Pour info, j'ai trouvé sur
http://vbnet.mvps.org/index.html?code/network/netfileenum.htm un très bon
code expliquant comment trouver la liste des fichiers ouverts à partir d'une
autre machine. Je ne vois par contre pas comment faire pour connaître la
liste des fichiers ouverts par les users de la machine sur laquelle on se
trouve. (cf la phrase: Note that the listing does not contain any files
opened or owned by the laptop session itself - only those opened via the
network connection are returned.)

J'utilise VB6 SP6 et mon application n'est destinée qu'à des systèmes NT,
2000 ou XP. Les systèmes 95, 98 et ME ne sont et ne seront pas supportés
pour une question de sécurité.

Merci d'avance pour votre aide,

Philippe


"Patrick Philippot" wrote in message
news:
Philippe Halet wrote:
> J'aimerais connaître un moyen de vérifier si un fichier est déjà
> ouvert dans les sessions en cours sur la machine locale et si oui par
> quelle application?

Bonjour,

La question n'est pas très claire: "par quelle application?".

Vous voulez vérifier par programme ou via un utilitaire? Dans ce dernier
cas: http://www.sysinternals.com/ | Process Explorer.

--
Patrick Philippot - Microsoft MVP
MainSoft Consulting Services
www.mainsoft.fr




Avatar
Patrick Philippot
Ce que vous voulez faire est possible puisque Process Explorer et
d'autres utilitaires le font.

Cependant, c'est une opération assez lourde.

1. Énumération de tous les processus.
2. Pour chaque processus, énumération des ressources
3. Pour chaque ressource, est-ce un handle de fichier?
4. Si oui, récupération du nom du fichier et stockage du nom du
processus (nom de l'exe)
5. Est-ce que c'est le fichier que je cherche?

Je vais tâcher de vous trouver quelque chose (pas ce soir) mais je n'ai
jamais vu faire ça en VB. Si je trouve du code, ça sera probablement du
C ou du C++.

--
Patrick Philippot - Microsoft MVP
MainSoft Consulting Services
www.mainsoft.fr
Avatar
Patrick Philippot
Voir http://cmp.phys.msu.su:8000/ntclub/zip/Hmz.zip

C'est un clone du NTHandle de SysInternals.com mais avec le code source
en C++. Ce programme est capable d'énumérer tous les processus et pour
chaque processus d'énumérer les ressources, dont les fichiers ouverts.

Je vois mal porter tout ça en VB. Le mieux serait probablement d'isoler
le code qui vous intéresse dans une DLL.

--
Patrick Philippot - Microsoft MVP
MainSoft Consulting Services
www.mainsoft.fr