Page 1 sur 1
[..] Savoir si un fichier est ouvert ou non.
Posté : ven. 04 mars 2011 10:40
par eric
Bonjour,
Pour faire suite à ce message :
http://autoitscript.fr/forum/viewtopic.php?f=21&t=6440
Pensez-vous qu'il soit possible ou non de vérifier en boucle si un fichier est ouvert ou non, sans passer par une méthode qui ouvre le fichier pour contrôler.
Merci
Eric
Re: [..] Savoir si un fichier est ouvert ou non.
Posté : ven. 04 mars 2011 10:56
par zeshrek
IMHO a ce moment là il faut te plonger dans la doc de l'OS.
Quand un fichier est ouvert, il doit y avoir un flag qqpart qui l'indique sinon, il ne pourrait pas d'indiquer que tel est le cas. Par contre ou est ce flag et comment le lire, puis ensuite comment l'interpréter ...

Re: [..] Savoir si un fichier est ouvert ou non.
Posté : ven. 04 mars 2011 12:47
par eric
Bonjour zeshrek,
Effectivement j'ai aussi cherché ce genre d'infos dans le registre ou ailleurs mais pour l'instant je n'ai rien trouvé.
Re: [..] Savoir si un fichier est ouvert ou non.
Posté : ven. 04 mars 2011 14:59
par sksbir
bonjour
Apparemment, la valeur "inusecount" de CIM_LogicalFile ou de CIM_DataFile n'a pas l'air d'être alimentée. ( c'est du moins ce qu'on peut lire partout après une petite recherche ).
Par contre,j'ai lu un truc intéressant au passage sur cette idée de vouloir tester un fichier avant de l'ouvrir :
source
In general, you should always avoid relying on file accessibility checks. The reason is that it might be, and then it may change just a couple of cycles before you access it.
Instead, just try to open it and see if you have any errors.
Re: [..] Savoir si un fichier est ouvert ou non.
Posté : ven. 04 mars 2011 15:12
par eric
Bonjour sksbir,
J'avoue ne pas avoir tout compris à la méthode.
Est-ce qu'un petit exemple de code serait possible ?
Merci
Re: [..] Savoir si un fichier est ouvert ou non.
Posté : ven. 04 mars 2011 19:27
par Tlem
Le plus simple, serait de nous décrire le process exact de votre interrogation.
Pourquoi voulez-vous tester aussi souvent si un fichier est ouvert ?
Quel en est l'action ou l'événement en découlant ?
Si nous avons l'ensemble des données de votre problème, peut être pourrons nous vous apporter une solution ou une alternative.
Re: [..] Savoir si un fichier est ouvert ou non.
Posté : lun. 07 mars 2011 10:23
par eric
Bonjour,
Je vais essayer de résumer le process que je voudrais réaliser.
J'ai un logiciel de dessin technique (pour info il peut y en avoir plusieurs, AutoCAD, AutoCAD LT, ZWCAD...) qui une fois ouvert lance un script écrit dans un langage propre au logiciel.
Ce script effectue des opérations en boucle de type :
- Ouvrir un fichier
- Effectuer une série d'opérations
- Fermer le fichier
- Ouvrir un autre fichier
- Effectuer une série d'opérations
- Fermer le fichier
Etc.
Le but ici est d'ajouter une progressbar qui va évoluer par rapport au nombre de fichiers restant. (En sachant que je connais la liste des fichiers à traiter)
Comme je n'ai pas vraiment la main sur ce qui se passe dans le logiciel de dessin, je pensais vérifier si le fichier était ouvert ou non.
- C'est à dire que je prends le nom et le chemin du premier fichier, je vérifie en boucle si il est ouvert ou non.
- Tant que le fichier est fermé rien ne se passe
- Dès que le fichier est ouvert, la progressbar évolue
- Je prends ensuite le nom et le chemin du second fichier, je vérifie en boucle si il est ouvert ou non.
etc.
Voilà pourquoi je voulais tester l'ouverture d'un fichier en boucle mais si vous avez une autre solution je suis preneur
Merci
Re: [..] Savoir si un fichier est ouvert ou non.
Posté : lun. 07 mars 2011 10:51
par sksbir
Bonjour
Si le script en question enregistre les modifications qu'il a fait dans le fichier en question, alors tu peux utiliser la date de modification du fichier plutôt que de savoir si le fichier est ouvert.
Par ailleurs, c'est pas une bonne idée amha de partir sur la notion de fichier ouvert : suppose un instant que ton script autocad ouvre et referme un des fichiers à traiter avant que ton programme de surveillance ait effectué une boucle : le programme de surveillance aura pas vu passer l'étape, et continuera à "surveiller" le fichier alors que le script autocad sera passé à autre chose depuis bien longtemps.
Re: [..] Savoir si un fichier est ouvert ou non.
Posté : lun. 07 mars 2011 11:14
par eric
Bonjour sksbir,
Le script n'enregistre pas forcément les modifications donc la date du fichier ne change pas à chaque fois.
Pour la rapidité en général le programme fait par Autoit analysera le fichier plus rapidement qu'AutoCAD (ou autre) n'effectuera sa série d'opérations.
Mais dans l'absolue effectivement ça pourrais même si c'est quand même très peu probable.
Mais je suis ouvert à d'autres propositions aussi.
Re: [..] Savoir si un fichier est ouvert ou non.
Posté : lun. 07 mars 2011 11:26
par sksbir
ok ok
Le plus élégant serait tout de même de modifier les scripts que tu veux surveiller afin d'y rajouter l'affichage de cette fameuse barre de progression.
Sinon, dans la mesure où tu connais le process qui "attaque" tous ces fichiers, alors tu pourrais essayer de voir du coté des handles qu'ouvre ce process.
-->
http://forum.sysinternals.com/topic7773.html
Et après ça, je suis à sec d'idées

Re: [..] Savoir si un fichier est ouvert ou non.
Posté : lun. 07 mars 2011 15:39
par Iste
FileGetTime() peut aussi permetre de connaitre le dernier acces (voir doc)
Re: [..] Savoir si un fichier est ouvert ou non.
Posté : lun. 07 mars 2011 16:12
par eric
Bonjour Iste,
L'idée est bonne sauf que le dernier accès ne fonctionne pas avec tous les type de fichiers je crois. (Je ne sais pas pourquoi d'ailleurs)
Et en l'occurrence pour ces types de fichiers, la date ne change pas lorsqu’on l'ouvre.
Re: [..] Savoir si un fichier est ouvert ou non.
Posté : lun. 07 mars 2011 23:49
par Tlem
Quelques idées en vrac :
- Éditer le script lancé par les programmes pour rajouter une option d'écriture du nom du fichier en cours de modification.
- Vérifier le titre de la fenêtre des applications à la recherche du nom du fichier.
- Voir les processus et les handles associés afin de connaitre le fichier utilisé.