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 :

[C#] Vérifier la disponibilité avant l'ouverture d'un fichier


Sujet :

Windows Forms

  1. #1
    Nouveau membre du Club
    Inscrit en
    Février 2007
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 49
    Points : 35
    Points
    35
    Par défaut [C#] Vérifier la disponibilité avant l'ouverture d'un fichier
    Bonjour,

    Je rencontre un p'tit problème d'accès à des fichiers et d'ouverture. Une exception intervient me disant que le fichier est utilisé par un autre processus.

    Une machine distante me génère des fichiers dans un dossier.
    Mon objectif est de détecter la présence de ces fichiers et de les traiter.

    Parfois le traitement consiste à déplacer le fichier dans un autre répertoire.

    Je détecte la création des fichiers à l'aide du composant FileSystemWatcher du FrameWork et le problème est que parfois j'essaye de déplacer le fichier détecté avant que la machine distante ait fini de l'écrire...
    Voyez-vous une solution me permettant de m'assurer qu'un fichier n'est utilisé par aucun autre processus avant de l'ouvrir?

  2. #2
    Membre régulier
    Inscrit en
    Mai 2002
    Messages
    101
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Mai 2002
    Messages : 101
    Points : 118
    Points
    118
    Par défaut
    Les Exceptions étant une fonctionalité et non une erreur, la meilleure façon de procéder consiste à effectuer l'ouverture de ton fichier dans un bloc try / catch et de récupérer l'exception... Comme ça, tu fais d'une pierre deux coup : s'il est utilisé, tu es informé, sinon, tu le traites.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Février 2007
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 49
    Points : 35
    Points
    35
    Par défaut
    Merci, c'est en effet ce que je faisais auparavant, mais il est possible qu'à terme j'aie à traiter environ 5000 fichiers en une heure, et quoiqu'il arrive il faut que je traite ce fichier.

    J'avais pensé à faire quelque chose comme cela... mais c'est un peu bourrin non...?

    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
    20
     
    bool state = false;
    while(state == false)
    {
         try
         {
              TraitementFichier(path);
              state = true;
         }
         catch (Exception ex)
         {
              Console.WriteLine(ex.ToString());
              Thread.Sleep(100); // Je lui laisse un peu de repos afin d'éviter de boucler trop rapidement
         }
    }
     
    public void TraitementFichier(string path)
    {
         // Ouverture du Fichier, Lecture, Traitement, blabla...
    }
    En écrivant ce message, je me suis dit que j'allais tester avant quand même... et ça marche bien, il me lance l'exception de temps en temps (souvent qu'une seule fois) et arrive à traiter le fichier...

  4. #4
    Membre régulier
    Inscrit en
    Mai 2002
    Messages
    101
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Mai 2002
    Messages : 101
    Points : 118
    Points
    118
    Par défaut
    Ben effectivement, ça va marcher, mais je vois deux trucs un peu trop bourrin à mon goût :

    1. Le délai est vachement court... Est-ce que tes fichiers sont bloqués par d'autres processus (auquel cas, 100ms ça peut être correct) ou par des actions "humaines" (auquel cas, passe au moins à 5000ms)

    2. En cas d'erreur exterieure qui ferait que le lock n'est pas relâché, ta boucle tournerait ad vitam eternam... Rajoute peut-être un compteur qui permet d'en sortir, quitte à lancer une autre exception.

  5. #5
    Nouveau membre du Club
    Inscrit en
    Février 2007
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 49
    Points : 35
    Points
    35
    Par défaut
    C'est un serveur Linux qui me donne ces fichiers dans un répertoire partagé avec Samba, donc je pense que 100ms est un peu court je vais peut être passer à 1000.

    En effet, je vais mettre un compteur pour plus de sécurité.

    Merci de ton avis.

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

Discussions similaires

  1. Vérifier un enregistrement avant d'en inserer un autre
    Par morgan47 dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 06/07/2006, 23h51
  2. Réponses: 7
    Dernier message: 26/03/2006, 16h46
  3. [VBA-E] Lancement de la macro avant l'ouverture des feuilles
    Par repié dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 15/02/2006, 16h07
  4. VBA Excel - Vérifier la disponibilité internet
    Par pjthedj dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 24/12/2005, 18h12
  5. [Formulaire] vérifier les champs avant enregistrement
    Par julien_t_m dans le forum Access
    Réponses: 5
    Dernier message: 16/10/2005, 20h53

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