Tester si un fichier est déjà ouvert par un programme tiers - Java - Programmation
Marsh Posté le 15-04-2008 à 21:05:45
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.....
Marsh Posté le 16-04-2008 à 10:06:24
Un petit tour sur le JavaDoc pour la class "File" m'indique qu'il existe une méthode "canWrite()"
canWrite |
Marsh Posté le 16-04-2008 à 12:18:25
bugsan a écrit : |
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.
Marsh Posté le 16-04-2008 à 18:27:14
E@gle_One a écrit : |
+1
Marsh Posté le 21-04-2008 à 12:49:06
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...
Marsh Posté le 21-04-2008 à 16:02:28
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
Marsh Posté le 24-04-2008 à 11:02:15
bugsan a écrit : J'ai l'impression que la seule solution ça va être de faire une méthode native ... |
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+
Marsh Posté le 24-04-2008 à 17:37:39
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.
Marsh Posté le 26-04-2008 à 14:47:53
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^^...
Marsh Posté le 14-04-2008 à 13:29:10
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 !