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

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

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 !

Reply

Marsh Posté le 14-04-2008 à 13:29:10   

Reply

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.....


---------------
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
Reply

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
 
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


Reply

Marsh Posté le 16-04-2008 à 12:18:25    

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
Reply

Marsh Posté le 16-04-2008 à 18:27:14    

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
Reply

Marsh Posté le 19-04-2008 à 02:06:12    

essai avec java.nio.FileLock

Reply

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...

Reply

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

Message cité 1 fois
Message édité par bugsan le 21-04-2008 à 16:08:14
Reply

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 ...
 
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+

Reply

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.


---------------
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
Reply

Marsh Posté le 24-04-2008 à 17:37:39   

Reply

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^^...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed