IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Entrée/Sortie Java Discussion :

Savoir si un fichier est déjà utilisé


Sujet :

Entrée/Sortie Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Étudiant
    Inscrit en
    Mai 2004
    Messages
    29
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2004
    Messages : 29
    Par défaut Savoir si un fichier est déjà utilisé
    Bonjour à tous,

    J'ai un léger problème et je ne sais pas comment le résoudre.
    Mon programme parcours récursivement un répertoire et me renvois les noms des fichiers trouvés.

    Ce que je souhaiterai c'est que mon programme m'indique quand le fichier est déjà utilisé par une autre application.

    Avez vous une solution pour détecter cela ?

    Merci d'avance.

  2. #2
    Membre éprouvé
    Avatar de Deadpool
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    1 312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 1 312
    Par défaut
    Salut.

    A mon sens, il y a une double problématique à ce problème :

    - Tout d'abord il faut que l'autre application verrouille le fichier qu'elle utilise.

    - Ensuite il faut détecter le verrouillage du fichier.

    Pour le fait qu'une autre application verrouille effectivement le fichier, je crois que malheureusement, il n'y a aucun moyen d'en être sûr.

    Par contre, pour détecter le verrouillage d'un fichier, après quelques tests sous Windows, j'ai constaté qu'en essayant d'ouvrir un FileOutputStream (flux d'écriture dans un fichier) sur le fichier testé alors que celui-ci est verrouillé (et donc à priori existe), ça balance un FileNotFoundException.

    Peut être une piste à suivre faute de mieux en espérant que cela puisse t'aider.

  3. #3
    Membre averti
    Étudiant
    Inscrit en
    Mai 2004
    Messages
    29
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2004
    Messages : 29
    Par défaut
    Citation Envoyé par Deadpool
    Par contre, pour détecter le verrouillage d'un fichier, après quelques tests sous Windows, j'ai constaté qu'en essayant d'ouvrir un FileOutputStream (flux d'écriture dans un fichier) sur le fichier testé alors que celui-ci est verrouillé (et donc à priori existe), ça balance un FileNotFoundException.
    Salut,

    Merci pour ta réponse !

    J'ai testé au boulot sur un Mac, apparemment je n'obtiens pas cette erreur.
    Je regarderai sous Linux.
    Si cela ne fonctionne pas comme je veux je serai obligé de faire quelque chose de moins jolie. Comme regarder si la date de modification du fichier ne change pas par exemple.

    Merci encore.

  4. #4
    Membre éprouvé
    Avatar de Deadpool
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    1 312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 1 312
    Par défaut
    Citation Envoyé par showlap1
    Salut,

    Merci pour ta réponse !

    J'ai testé au boulot sur un Mac, apparemment je n'obtiens pas cette erreur.
    Je regarderai sous Linux.
    Si cela ne fonctionne pas comme je veux je serai obligé de faire quelque chose de moins jolie. Comme regarder si la date de modification du fichier ne change pas par exemple.

    Merci encore.
    Es-tu sur que le fichier que tu testes est effectivement locké?

    Sinon tu peux retester en poussant un peu plus loin, c'est à dire en essayant de locker le fichier cible via un FileChannel, si c'est possible ça veut dire que le fichier n'est pas utilisé.

    Le code qui va bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    FileOutputStream stream = new FileOutputStream("chemin de ton fichier"); //ouverture d'un flux d'écriture vers le fichier cible
    FileChannel channel = stream.getChannel();
    FileLock lock = channel.tryLock(); //on tente de locker le fichier
    if (lock!=null){
     //on a pu locker le fichier, celui-ci n'est pas utilisé
     System.out.println("fichier non utilisé")
     //libération du lock
     lock.release():
     
     
    }else{
     //le fichier n'a pas pu être locké, il est déjà utilisé
     System.out.println("fichier déjà utilisé")
    }
     
    //libération des ressources après le test
    channel.close();
    stream.close();
    Note: faudra certainement des try catch autour de tout ça.


  5. #5
    Membre Expert
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Par défaut
    Attention cette manip ne fonctionne que sur certains OS. Si le test s'effectue sur des fichiers issus de la même application java, ça marche. (et on prie pour que ça marche aussi sur notre OS).

  6. #6
    Membre averti
    Étudiant
    Inscrit en
    Mai 2004
    Messages
    29
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2004
    Messages : 29
    Par défaut
    Citation Envoyé par iohack
    Attention cette manip ne fonctionne que sur certains OS. Si le test s'effectue sur des fichiers issus de la même application java, ça marche. (et on prie pour que ça marche aussi sur notre OS).
    Bas justement mon problème est que ce n'est pas forcément mon application Java qui sera déjà en train d'utiliser les fichiers.

    Un programme tiers sera en train d'écrire sur le fichier et mon programme tournant en boucle doit attendre que l'écriture soit terminée avant de charger le fichier.

    Si le programme qui écrit les fichiers est bien écrit (ouverture du fichier, écriture en tampon, flush et fermeture) je peux espérer lever une exception lors de la lecture par mon programme.

    En revanche si le programme ouvre, écrit un morceau, referme, puis réouvre et ainsi de suite, la probabilité d'avoir une exception est beaucoup plus faible.

Discussions similaires

  1. Comment savoir si un fichier est utilisé sans le bloquer ?
    Par pofet dans le forum Windows Forms
    Réponses: 4
    Dernier message: 16/08/2011, 09h51
  2. Savoir si un fichier est utilisé par une application
    Par rambc dans le forum Général Python
    Réponses: 22
    Dernier message: 21/11/2010, 11h50
  3. Réponses: 2
    Dernier message: 11/06/2010, 15h45
  4. Savoir si un fichier est utilisé
    Par arnaud036 dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 26/09/2007, 11h57
  5. Savoir si un fichier est déjà utilisé
    Par cryptorchild dans le forum Langage
    Réponses: 3
    Dernier message: 15/05/2006, 13h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo