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

Windows Forms Discussion :

Comment savoir si un fichier est utilisé sans le bloquer ?


Sujet :

Windows Forms

  1. #1
    Membre du Club
    Profil pro
    Développeur .NET
    Inscrit en
    Mai 2007
    Messages
    50
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2007
    Messages : 50
    Points : 55
    Points
    55
    Par défaut Comment savoir si un fichier est utilisé sans le bloquer ?
    Bonjour,

    Je cherche un moyen de savoir si un fichier est utilisé par une autre application sans bloquer ce fichier à mon tour.

    Actuellement, j'utilise la méthode suivante :
    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
    public static bool IsFileUsed(FileInfo fileInfo)
    {
    	try
    	{
    		using (FileStream fs = new FileStream(fileInfo.FullName, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite))
    		{
     
    		}
    		return false;
    	}
    	catch (IOException ex) // S'il est bloqué, on arrive ici
    	{
    		return true;
    	}
    }
    Le principe de cette méthode est qu'elle bloque le fichier un court instant: si ça passe, le fichier était non bloqué (donc libre) sinon, il était utilisé par une autre application.

    Le problème est que, durant un court instant, cette méthode bloque elle aussi le fichier. Si l'autre application essaye d'accéder au fichier à ce même moment, l'accès lui est refusé.

    Dans l'idéal, je cherche un moyen d'aller interroger l'état de ce fichier, mais sans avoir besoin de le bloquer moi-même.

    Vous avez une idée ou une solution à proposer ?

    Merci d'avance.

  2. #2
    Expert confirmé Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Points : 5 485
    Points
    5 485
    Par défaut
    Bonsoir.

    Réponse courte : non. La façon standard de procéder est de tenter d'ouvrir le fichier et d'attraper une exception éventuelle. Après tout, ouvrir cela revient simplement à acquérir un verrou et charger les premières données dans un buffer. Le processus peut être accéléré en réduisant la taille du buffer.

    Réponse longue : oui mais ça doit être sale, lent, et cela doit réclamer des droits admins. En effet, bien que je ne connaisse aucune API win32, Sysinternals est capable de lister les handles, donc c'est faisable. Mais à mon avis, ils se contenter de créer, pour chaque processus, un pointeur vers la zone mémoire où sont contenus les handles du processus. Et comme cette zone est privée... possible que je me trompe toutefois.

  3. #3
    Membre du Club
    Profil pro
    Développeur .NET
    Inscrit en
    Mai 2007
    Messages
    50
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2007
    Messages : 50
    Points : 55
    Points
    55
    Par défaut
    Merci pour cette réponse.

    C'est un peu ce que j'avais vu en fouinant sur le net. Mais j'espère toujours tomber sur la pépite qui me permettra d'avancer...

    Qu'il s'agisse de Sysinternals Handle ou Process Monitor, les deux requièrent des droits d'admin en effet, ce qui n'est pas possible dans mon cas.

    Réponse courte : non. La façon standard de procéder est de tenter d'ouvrir le fichier et d'attraper une exception éventuelle. Après tout, ouvrir cela revient simplement à acquérir un verrou et charger les premières données dans un buffer. Le processus peut être accéléré en réduisant la taille du buffer.
    Impossible dans mon cas, aussi court le temps de blocage soit-il, il arrive toujours que cela bloque l'autre application, ce qui m'est interdit.

  4. #4
    Futur Membre du Club
    Inscrit en
    Mars 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 9
    Points : 8
    Points
    8
    Par défaut
    Salut,
    je pense que dans ton cas il serait préférable d'utiliser un base de donne à une table très simple du type sqlight .

    Avec Sa tu peu avoir plusieurs accès simultané à tes données . C'est fait pour !

  5. #5
    Membre du Club
    Profil pro
    Développeur .NET
    Inscrit en
    Mai 2007
    Messages
    50
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2007
    Messages : 50
    Points : 55
    Points
    55
    Par défaut
    Bonjour K.A.POL,

    Ta réponse n'a pas de rapport avec mon problème.

    Je ne cherche pas un moyen de stocker un fichier ou d'avoir des accès simultanés, mais uniquement de savoir si un fichier (quel qu'en soit le type, par exemple un fichier .doc) est utilisé par une autre application.

Discussions similaires

  1. Comment savoir si un fichier est en train d'etre lu ou accede?
    Par daniel_gre dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 20/09/2006, 11h47
  2. [Upload]comment savoir si un fichier est télécharger?
    Par ehmppowa dans le forum Langage
    Réponses: 12
    Dernier message: 23/01/2006, 19h43
  3. comment savoir si un fichier est un lien symbolique?
    Par trotters213 dans le forum C++
    Réponses: 2
    Dernier message: 02/12/2005, 12h55
  4. Comment savoir qu'un fichier est modifie
    Par moniphal dans le forum Langage
    Réponses: 2
    Dernier message: 02/10/2005, 10h26
  5. Unix - Comment savoir si un fichier est ouvert
    Par freddyboy dans le forum C
    Réponses: 7
    Dernier message: 06/10/2004, 15h53

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