Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1530 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  Tester si un fichier est déjà ouvert par un programme tiers

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Tester si un fichier est déjà ouvert par un programme tiers

n°1717220
E@gle_One
Posté le 14-04-2008 à 13:29:10  profilanswer
 

Bonjour,
 
Je développe un logiciel qui gère des interactions entre des fichiers Excel, en Java. Dans certains cas d'utilisation, le logiciel lance Excel et ouvre un fichier donné. Une fois ce fichier complété par l'utilisateur, il doit normalement le fermer et un message l'y invite. Ensuite mon programme va collecter des infos dans ce fichier, les résume dans un autre. Mon problème est que si l'utilisateur ne ferme pas ce fichier, ou a ouvert le résumé par ailleurs, l'écriture plante, d'autres fichiers ne sont pas close() et je les perds.
 
Il me faudrait donc pouvoir tester si certains fichiers sont ouverts, par un programme tiers. J'ai essayer les lock, mais ce n'est pas adapté à mon problème puisque l'utilisateur peut ouvrir les fichiers par lui même avec Excel. Malgré mes recherches dans l'API et sur les forums, je n'ai rien pu trouver. Avez-vous une idée?
 
Merci !

mood
Publicité
Posté le 14-04-2008 à 13:29:10  profilanswer
 

n°1718080
wapcamer
Posté le 15-04-2008 à 21:05:45  profilanswer
 

tu peux pt-être essayer d'écrire qqchose à la fin de ton fichier. S'il est ouvert par une autre application, ça plantera et donc tu pourras gérer l'erreur.....


---------------
Voir les RAW sous Android: https://market.android.com/details? [...] .RawVision Blog Photo: http://photouch.me Applications mobiles: http://caketuzz.com Wapcam Project: http://wapcam.mobi
n°1718304
bugsan
Posté le 16-04-2008 à 10:06:24  profilanswer
 

Un petit tour sur le JavaDoc pour la class "File" m'indique qu'il existe une méthode "canWrite()"
 

canWrite
 
public boolean canWrite()
 
    Tests whether the application can modify the file denoted by this abstract pathname.
 
    Returns:
        true if and only if the file system actually contains a file denoted by this abstract pathname and the application is allowed to write to the file; false otherwise.  
    Throws:
        SecurityException - If a security manager exists and its SecurityManager.checkWrite(java.lang.String) method denies write access to the file


n°1718447
E@gle_One
Posté le 16-04-2008 à 12:18:25  profilanswer
 

bugsan a écrit :


Un petit tour sur le JavaDoc pour la class "File" m'indique qu'il existe une méthode "canWrite()"


 
Qui n'est pas adapté à la situation car cela te donne juste une indication sur les droits. J'ai fait un tour sur la JavaDoc, ce n'est pas parce que beaucoup de gens ne le font pas que je ne l'ai pas fait ^^. C'était la réponse logique, j'ai aussi essayé. Merci d'avoir regardé mon problème.  
 
Je vais essayer de l'ouvrir avant "à blanc" et de gérer l'exeption, en fermant avant mes autres files, un peu comme ce que propose wapcamer. On va voir si c'est gérable, sinon on m'a donné une autre piste à base de copy et de lecture de tableaux de bytes, j'ai encore du mal a comprendre et d'autres parties à développer qui urgent donc quand j'aurais la solution je posterais ce que j'ai fait.  
 
Bonne journée.

Message cité 1 fois
Message édité par E@gle_One le 16-04-2008 à 12:19:55
n°1718743
wapcamer
Posté le 16-04-2008 à 18:27:14  profilanswer
 

E@gle_One a écrit :


 
Qui n'est pas adapté à la situation car cela te donne juste une indication sur les droits.


+1
 :hello:  


---------------
Voir les RAW sous Android: https://market.android.com/details? [...] .RawVision Blog Photo: http://photouch.me Applications mobiles: http://caketuzz.com Wapcam Project: http://wapcam.mobi
n°1720171
bugsan
Posté le 19-04-2008 à 02:06:12  profilanswer
 

essai avec java.nio.FileLock

n°1720940
E@gle_One
Posté le 21-04-2008 à 12:49:06  profilanswer
 

bugsan a écrit :

essai avec java.nio.FileLock


 
Cf premier post, j'ai essayé mais ce n'est pas adapté à mon problème.  
J'ai une solution qui marche pour certains trucs, en utilisant un Workbook de jxlAPI, ça m'évite les problèmes les plus probables puisque avec ça je peux lire un fichier même si il est ouvert par excel. C'est toujours plus ou moins en suspend...

n°1721107
bugsan
Posté le 21-04-2008 à 16:02:28  profilanswer
 

J'ai l'impression que la seule solution ça va être de faire une méthode native ...
 
Mais ca m'étonne bcp que le FileLock ne marche pas car il est justement sensé réserver le fichier. Tu fais un trylock() qui attend que le lock passe. Quand tu lock le fichier, enfin, normalement aucune autre appli (process windows) doit pouvoir l'utiliser ...
Sinon ca sert pas à grand chose cette class alors

Message cité 1 fois
Message édité par bugsan le 21-04-2008 à 16:08:14
n°1723418
E@gle_One
Posté le 24-04-2008 à 11:02:15  profilanswer
 

bugsan a écrit :

J'ai l'impression que la seule solution ça va être de faire une méthode native ...
 
Mais ca m'étonne bcp que le FileLock ne marche pas car il est justement sensé réserver le fichier. Tu fais un trylock() qui attend que le lock passe. Quand tu lock le fichier, enfin, normalement aucune autre appli (process windows) doit pouvoir l'utiliser ...
Sinon ca sert pas à grand chose cette class alors


 
Donc, si mon fichier a été ouvert par l'utilisateur, par Excel dans le cas présent et que mon programme doit écrire dessus, je fais un trylock() dessus et le thread attend que la ressource soit libérée? Je pourrais afficher un message  qui demanderait de fermer le fichier, et une fois le fichier fermé depuis Excel, le programme exécuterait les  séquences suivantes? J'ai essayé de faire des lock() mais ça fait un moment et je ne me souviens plus du comportement et où ça coinçait, enfin il me semble bien que le fichier n'était pas locké justement s'il était ouvert par un autre programme.
 
Et qu'entends-tu par méthode native, je ne sais aps ce que ça veut dire^^.
 
A+

n°1723931
wapcamer
Posté le 24-04-2008 à 17:37:39  profilanswer
 

méthode native, ça veut dire une fonction/méthode native de l'OS (en C ou C++ ou autre) que tu mappes en JNI pour l'utiliser en Java.


---------------
Voir les RAW sous Android: https://market.android.com/details? [...] .RawVision Blog Photo: http://photouch.me Applications mobiles: http://caketuzz.com Wapcam Project: http://wapcam.mobi
mood
Publicité
Posté le 24-04-2008 à 17:37:39  profilanswer
 

n°1724932
E@gle_One
Posté le 26-04-2008 à 14:47:53  profilanswer
 

wapcamer a écrit :

méthode native, ça veut dire une fonction/méthode native de l'OS (en C ou C++ ou autre) que tu mappes en JNI pour l'utiliser en Java.


 
Ough, là, ça va largement dépasser mes limites^^...


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  Tester si un fichier est déjà ouvert par un programme tiers

 

Sujets relatifs
Mise en forme d'un fichier xls compliquéeLecture / écriture fichier *.ini en C
outils pour fichier de configurationResources dans un fichier jar avec ant
Lancer un fichier bat en c/c++Menu sur fichier jpg
modifier script vb de visualisation de fichierUtiliser une fonction du shell dans un programme C
Configurez les propriétés API pour contrôler un fichier dans la page Wj'ai un pb d'insertion de lignes dans un fichier
Plus de sujets relatifs à : Tester si un fichier est déjà ouvert par un programme tiers


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR