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 :

Vérification de l'ouverture d'un fichier


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2011
    Messages
    610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2011
    Messages : 610
    Par défaut Vérification de l'ouverture d'un fichier
    Bonjour,

    Petit soucis...
    Le but de l'appli est d'envoyer une alerte à d'autre poste de l'arrivé d'un fichier (pdf) dans une répertoire sur le partage. Jusque l'a tout fonctionne, hors j'aimerai mettre une sécurité qui vérifie si l'ouverture du fichier a été faite par l'un des utilisateur, si ce n'est pas le cas celui-ci s'imprime.
    C'est donc pour vérifier si le fichier est ouvert que je bloque, car cette vérification ne doit pas empêcher l'ouverture du fichier par un autre user (pour ce cas c'est réglé grâce au paramètre FileShare), mais maintenant il me dit qu'il est ouvert alors que celui-ci ne l'est pas
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
            private void waitPrint()
            {
                bool open = false;
                for (int i=0; i <= 200; i++)
                {
                    Thread.Sleep(1000);
                    open = TryOpen(fullPath);
                    if (open == true)
                    {
                        this.Invoke(new nomfichier(nomfichierText), 3, " Ouvert...");
                        break;
                    }
                    else
                        this.Invoke(new nomfichier(nomfichierText), 3, " Fermé...");
                }
                if (open == false)
                    Print(fullPath);   
            }
     
            private bool TryOpen(string filePath)
            {
                FileStream fs;
                try
                {
                    fs = File.Open(filePath, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite);
                    fs.Close();
                    return true;
                }
                catch
                {
                    fs = null;
                    fs.Close();
                    return false;
                }
            }
    Merci

  2. #2
    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
    Déjà, faire un fs.Close() alors que fs vaut null, tu vas avoir un problème.

    Ensuite tu ne testes pas ton type d'exception : or, la méthode Open peut lever une exception pour deux ou trois raison différentes, que tu interprêtes de manière univoque.

    Sinon, je ne comprends pas trop l'utilité de ta boucle avec un wait.

    Bref, précise un peu mieux, car je ne trouve pas ça très clair.

    Poutr attendre l'arrivée de fichiers dans un répertoire, il y a une classe qui s'appelle le FileSystemWatcher qui fait ça très bien.

  3. #3
    Membre chevronné
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2011
    Messages
    610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2011
    Messages : 610
    Par défaut
    Salut Bluedeep!
    Citation Envoyé par Bluedeep Voir le message
    Déjà, faire un fs.Close() alors que fs vaut null, tu vas avoir un problème.
    Ensuite tu ne testes pas ton type d'exception : or, la méthode Open peut lever une exception pour deux ou trois raison différentes, que tu interprêtes de manière univoque.
    Belle erreur de ma part, mais bizarrement je ne passe jamais par le catch

    Citation Envoyé par Bluedeep Voir le message
    Sinon, je ne comprends pas trop l'utilité de ta boucle avec un wait.
    Cette partie me permet de voir si le fichier est ouvert durant le délai de plus de 3min, si celui-ci n'est pas ouvert ::::> Impression

    Citation Envoyé par Bluedeep Voir le message
    Poutr attendre l'arrivée de fichiers dans un répertoire, il y a une classe qui s'appelle le FileSystemWatcher qui fait ça très bien.
    Je suis complètement d'accord avec toi, c'est pour cela que je utilise FileSystemWatcher pour vérifier l'arrivé d'un nouveau fichier dans le répertoire, mais je ne vois pas comment l'utiliser pour vérifier si une utilisateur a ouvert ce nouveau fichier ou non

    Merci de ton Aide.

  4. #4
    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 FrameBreak Voir le message
    Cette partie me permet de voir si le fichier est ouvert durant le délai de plus de 3min, si celui-ci n'est pas ouvert ::::> Impression
    Dans ce cas, il fait que tu l'ouvres en mode exclusif (FileShare.None) c'est le seul moyen de t'assurer qu'il n'est pas ouvert par ailleurs.

  5. #5
    Membre chevronné
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2011
    Messages
    610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2011
    Messages : 610
    Par défaut
    FileShare.None permet effectivement de refuser le partage du fichier, mais cette propriété bloque l'accès aux utilisateurs (qui ne peuvent pas ouvrir le fichier durant le traitement de la méthode waitPrint()).
    Il me faudrait une juste milieu qui puisse laisser l'accès aux utilisateurs et donc de quitter le traitement vérifiant si le fichier est ouvert.

    Edit :Je cherche à éviter l'impression et non l'inverse... Zéro Papier

  6. #6
    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 FrameBreak Voir le message
    FileShare.None permet effectivement de refuser le partage du fichier, mais cette propriété bloque l'accès aux utilisateurs (qui ne peuvent pas ouvrir le fichier durant le traitement de la méthode waitPrint()).
    Dans la mesure où cela va durer une fraction de seconde (puisque tu referme dans la foulée, si le fichier n'est pas ouvert ailleurs, donc si tu peux l'ouvrir), je ne comprends pas ton argument là.

    Ce qui est sur c'est que ton ouverture en mode partagé ne sert à rien du tout puisque sauf si un utilisateur a ouvert en mode exclusif de son coté, tu pourras toujours ouvrir.

    Tu pourrais aussi tester la date de dernier accès au fichier.

    Il me faudrait une juste milieu qui puisse laisser l'accès aux utilisateurs et donc de quitter le traitement vérifiant si le fichier est ouvert.
    Rien compris.

    Edit :Je cherche à éviter l'impression et non l'inverse... Zéro Papier
    A ce propos, ton test est à l'envers, sauf erreur.

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

Discussions similaires

  1. Ouverture d'un fichier excel predefini
    Par nberthonneau dans le forum Access
    Réponses: 10
    Dernier message: 13/06/2007, 22h14
  2. Réponses: 2
    Dernier message: 06/04/2005, 12h01
  3. Vérification de l'existence d'un fichier
    Par alfu dans le forum ASP
    Réponses: 2
    Dernier message: 06/10/2004, 13h29
  4. Réponses: 5
    Dernier message: 27/07/2004, 17h04
  5. Réponses: 2
    Dernier message: 22/07/2002, 12h13

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