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 :

Repérer accessibilité d'un fichier


Sujet :

C#

  1. #1
    Membre éclairé Avatar de ppphil
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2007
    Messages : 612
    Points : 685
    Points
    685
    Par défaut Repérer accessibilité d'un fichier
    Bonjour,
    Je dois savoir quand un fichier est accessible pour pouvoir en faire une copie.
    Je balance le fichier (très lourd) sur un serveur et quand son transfert est terminé, je dois le copier ailleurs.
    Durant tout le transfert du fichier, j'ai le FileInfo.Lenght du fichier qui ne se modifie pas (il comporte la taille effective du fichier).
    J'ai fait un truc du genre :
    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
     
    private bool IsAccessible(string FilePath)
    {
      FileStream fs;
      try
      {
        fs = File.OpenRead(FilePath)
        fs.close();
        return true;
      }
      catch
      {
        retrurn false;
      }
    }
    Mais bon, ça me plait pas trop (chus pinailleur...).
    J'ai pas trouvé une fonction ou propriété d'un objet quelconque qui me fasse ça tout seul et certainement beaucoup plus fiablement....
    Y a-t-y qqun qu'aurais une idée ?

  2. #2
    Membre éprouvé Avatar de neptune
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 835
    Points : 958
    Points
    958
    Par défaut
    FileSystemWatcher devrait pouvoir t'aider.

  3. #3
    Membre éclairé Avatar de ppphil
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2007
    Messages : 612
    Points : 685
    Points
    685
    Par défaut
    Oui, effectivement, mais je ne veux justement pas l'utiliser...
    J'ai une autre version de ce soft avec des fsw et j'ai trop de problèmes dus à des protocoles différents (p.ex. nfs prorpiétaire) qui réagissent de manière bizzare...

  4. #4
    Membre extrêmement actif Avatar de fally
    Homme Profil pro
    Développeur .Net / BI
    Inscrit en
    Novembre 2007
    Messages
    966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur .Net / BI

    Informations forums :
    Inscription : Novembre 2007
    Messages : 966
    Points : 1 173
    Points
    1 173
    Par défaut
    Citation Envoyé par ppphil Voir le message
    Oui, effectivement, mais je ne veux justement pas l'utiliser...
    J'ai une autre version de ce soft avec des fsw et j'ai trop de problèmes dus à des protocoles différents (p.ex. nfs prorpiétaire) qui réagissent de manière bizzare...
    Ah bon? Explique-nous un peu!
    Sinon je te recommande vivement (tout comme neptune) FileSystemWatcher

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Durant tout le transfert du fichier, j'ai le FileInfo.Lenght du fichier qui ne se modifie pas
    Tu penses à appeler Refresh sur ton FileInfo ? Sinon il conserve la valeur de quand il a été créé, sans vérifier si le fichier a changé depuis...
    (il comporte la taille effective du fichier).
    Donc l'espace disque est pré-alloué avec la taille du fichier ? Dans ce cas, tu ne peux pas tester par la taille du fichier... tu pourrais utiliser le LastWriteTime à la place.

    Sinon, je ne vois pas trop ce qu'un FileSystemWatcher apportera... il permet d'être notifié quand un fichier est modifié, mais pas de savoir s'il est ouvert en écriture à un moment donné... (à moins de ce baser sur la "non-reception" d'un évènement ). Ou alors quelque chose m'a échappé ?

    De toutes façons, la méthode la plus fiable, à mon avis, est d'essayer de l'ouvrir en mode exclusif :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fs = File.Open(FilePath, FileMode.Open, FileAccess.Read, FileShare.None);
    Si le fichier est ouvert par un autre programme, Open lèvera une exception (UnauthorizedAccessException je crois...)

  6. #6
    Membre éclairé Avatar de ppphil
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2007
    Messages : 612
    Points : 685
    Points
    685
    Par défaut
    Pour Fally,
    Quand tu transfert un fichier :
    en smb le fichier est copié et son FileInfo.Length indique sa taille totale et non pas la taille actuellement déjà transférée. Le fichier n'est pas accessible. Le fsw va te générer un event Create au début du transfert. S'il faut 10 min pour transférer ton fichier, tu est obligé de savoir quand il est accessible pour pouvoir le copier plus loin.
    en nfs (en tous cas le protocole que je trouve sur certaines machines) le fichier est toujours accessible et sa taille varie au fur et à mesure que le fichier est copié.
    Je dois donc d'une part savoir si le fichier est accessible (smb) et d'autre part si sa taille et son lastwrite n'a pas été modifié (nfs).
    Ces vérification n'ont rien à voir avec fsw.

    Pour Tomlev :
    c'est ce que j'ai fait (File.OpenRead). Si j'ai une exception, le fichier n'est pas accessible. Ca fonctionne bien. Mais t'as raison, avec une ouverture exclusive, c'est encore + sur...
    Merci à tous et bonne journée

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

Discussions similaires

  1. Repérer si le fichier se termine par .txt
    Par kimikou dans le forum C
    Réponses: 1
    Dernier message: 28/03/2011, 23h01
  2. Repérer la dernière ligne d'un fichier
    Par rambc dans le forum Général Python
    Réponses: 26
    Dernier message: 20/10/2009, 21h06
  3. Repérer deux fichiers identiques mais pas avec les mêmes dates
    Par rambc dans le forum Général Python
    Réponses: 14
    Dernier message: 17/03/2009, 03h13
  4. [ADMIN] lancé programme sas après avoir repérer un fichier TAG
    Par sasseur dans le forum Administration et Installation
    Réponses: 4
    Dernier message: 04/03/2009, 16h52
  5. Réponses: 2
    Dernier message: 19/09/2006, 15h04

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