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

C# Discussion :

comment vérifier si un fichier est ouvert avant de le supprimer.


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Décembre 2007
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 105
    Par défaut comment vérifier si un fichier est ouvert avant de le supprimer.
    salut tt le monde

    ma question est simple

    comment vérifier si un fichier est ouvert avant de le supprimer. parce que si non il y aura un message d'erreur

  2. #2
    Expert confirmé
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Par défaut
    Ben tu peut le supprimer et entourer la suppression d'un try-catch pour attrapper l'erreur. Je ne crois pas qu'il y ai de moyens faciles de trouver si un fichier est actuellement ouvert. Si un tel moyen existe, j'aurai bien aimé le connaitre ...

  3. #3
    Membre expérimenté
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Par défaut
    C'est aussi simple d'essayer de le supprimer (try/catch) et de mettre un message si la suppression n'a pas réussie non ?

    Parce que si tu vois que le fichier est ouvert, que vas-tu faire si ce n'est mettre un message ?

    Edit : grilled par smyley.

    Sinon smyley, je pense que si tu tentes de créer un FileStream, sur le fichier dont tu veux tester l'ouverture, avec FileShare.None en option ca devrait te lever une exception si le fichier est déjà ouvert, enfin il me semble car je n'ai pas de quoi tester sous la main ^^

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    try
    {
        FileStream stream = new FileStream(filePathName, FileMode.Open, FileAccess.Read, FileShare.None);
    }
    catch(Exception ex)
    {
        ...
    }

  4. #4
    Membre confirmé
    Inscrit en
    Décembre 2007
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 105
    Par défaut
    je vasi tester vos 2 propositions.

    mais à vrai dire j'ai fouiller sur tous les forums et y a beaucoup de gens qui veulent savoir si existe-elle une tell eméthode

  5. #5
    Expert confirmé
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Par défaut
    Non à vrai dire avec l'exception tu sais qu'il y a eu une erreur lors de l'accès au fichier. Il est peut être ouvert, peut être qu'il n'existe pas, peut être que l'accès a été refusé, peut être que le disque de destination n'est plus accessible, etc etc...
    Ce que j'ai recherche c'est plus un moyen d'avoir la certitude que le fichier est véritablement ouvert par une autre application, et savoir quelle application ...

  6. #6
    Membre expérimenté
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Par défaut
    C'est sûr que suivant les cas possibles, le contexte qui gravite autour, ... pas mal de choses peuvent influer et ouvrir en FileShare.None peut ne pas suffir. Dans un cadre moins "strict", cela peut suffir. Par contre ca ne dit pas quel processus a le fichier.

    Je crois qu'il existe un utilitaire en ligne de commande ("Open handle" ou un truc du genre, c'est avec un truc pour Windows XP de mémoire) qui renvoie les process utilisant un fichier donné en paramètre de l'utilitaire, avec une redirection c'est vite fait d'avoir ca dans un fichier texte. Maintenant le fichier est-il facilement traitable c'est autre chose.

    Parce que sinon pour faire ca en C# je ne suis pas sûr que cela soit possible. Je ne suis pas spécialiste des WMI, mais il y a peut être des choses intéressantes de ce côté ? Enfin si l'utilisation des WMI est possible dans le cadre en question ^^

  7. #7
    Membre confirmé
    Inscrit en
    Décembre 2007
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 105
    Par défaut
    waw ça comence à chauffer entre les géants de l'informatique,

    y a des choses intéressante dans ces 2 dernières réponses.

    je penche dessus tt de suite

  8. #8
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Citation Envoyé par smyley Voir le message
    Non à vrai dire avec l'exception tu sais qu'il y a eu une erreur lors de l'accès au fichier. Il est peut être ouvert, peut être qu'il n'existe pas, peut être que l'accès a été refusé, peut être que le disque de destination n'est plus accessible, etc etc...
    Pas du tout !

    Si on utilise le File.Delete (ns System.IO)

    - il n'y a pas d'exception si le fichier n'existe pas
    - les exceptions en cas de fichier en utilisation ou de problème d'autorisation, de directory inexistant, etc .. sont différentes.

    Ce que j'ai recherche c'est plus un moyen d'avoir la certitude que le fichier est véritablement ouvert par une autre application, et savoir quelle application ...
    Tu l'as : IOException.

    Il suffit de ne pas filtrer les autres cas. cf MSDN

  9. #9
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    Sinon je crois que c'est possible de détecter l'utilisation d'un fichier par une autre application sans passer par les exceptions.
    EN fait je n'en suis pas réellement sur, mais je viens de penser à quelque chose.

    Dernièrement en VBS j'ouvre un fichier excel pour faire des trucs. Ce même fichier est déjà ouvert par moi même pour voir ce qu'il contient.
    Bref tout ceci pour dire que si vous ouvrez un fichier excel et qu'autre chose ou quelqu'un d'autre l'ouvre sur le même poste, alors il ne l'ouvrira qu'en lecture seul. On peut observer ce comportement en fermant le fichier read/write, et alors excel vous propose de passer l'autre instance d'excel en R/W sur le fichier et non Read only.

    Bref ce que propose excel est certainement lié à excel lui même. Mais le fait que la deuxième instance d'excel ne puisse ouvrir le fichier qu'en lecture seul, je en suis pas sur que cela soit un comportement d'excel, je pencherais pour un comportement de windows.

    Donc l'idée dans notre cas serait d'ouvrir le fichier, et de vérifier si les droits pour cette instance sont ReadOnly ou Read/Write.

    En WMI, hum avec cette methode de l'objet CIM_DataFile peut être.

    Mais la propriété InUseCount de CIM_LogicalFile semble mieux convenir :
    InUseCount
    Data type: uint64
    Access type: Read-only

    Number of "file opens" that are currently active against the file.

  10. #10
    Expert confirmé
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Par défaut
    Citation Envoyé par Bluedeep Voir le message
    Pas du tout !

    Si on utilise le File.Delete (ns System.IO)
    ouai ... sauf qu'on parlais du FileStream là ...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment vérifier qu'un fichier est déjà ouvert ?
    Par n@n¤u dans le forum Entrée/Sortie
    Réponses: 14
    Dernier message: 04/08/2011, 12h23
  2. Comment vérifier si un fichier est corrompu
    Par julien_974 dans le forum C#
    Réponses: 6
    Dernier message: 24/08/2010, 18h27
  3. [WD14] Vérifier si un fichier est ouvert dans une autre application
    Par Gaautman dans le forum WinDev
    Réponses: 1
    Dernier message: 17/01/2010, 20h07
  4. Réponses: 8
    Dernier message: 28/03/2006, 08h04
  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