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 :

pb désactivation FileSystemWatcher


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    499
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 499
    Par défaut pb désactivation FileSystemWatcher
    Bonjour,

    j'ai un ptit soucis avec un FileSystemWatcher
    Je l'utilise dans un service de transfert de fichiers.

    J'ai un répertoire ATransferer associé à mon FileSystemWatcher, qui dès qu'un fichier est créé dans le répertoireATransferer, le copie dans un autre répertoire
    J'ai lancé mon appli pour qu'elle tourne toute la nuit, 2 fichiers sont créés dans le répertoire ATransferer toutes les 30 secondes.

    Ce matin, j'ai pu constaté que le transfert a marché correctement les 5 premières minutes et puis sinon, tous les autres fichiers sont restés dans le répertoire ATransferer...
    ah si, ça a marché aussi pendant 5 minutes ce matin...
    (exactement 5 minutes les deux fois...)

    Quelqu'un pourrait-il m'éclairer?...

    au début, j'ai pensé que cela pouvait venir de la mise en veille du pc...
    mais non, il se met en veille au bout de 10 minutes...

    help, please!

  2. #2
    Membre expérimenté Avatar de scifire
    Inscrit en
    Juillet 2004
    Messages
    226
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 226
    Par défaut
    Salut.
    La premiere chose que je peux te dire c'est d'oublier pour le composant FileSystemWatcher. Moi aussi j'ai eu des problemes avec lui. Le problem c'etait qu'il met le verrou sur le fichier et on ne peut pas le manipuler Je peux te faire une demonstration (regarde le pieces jointes). Dans le code de la demonstration il y a aussi une solution possible du probleme.
    Des que je rentre chez moi je vais te donner une autre solution pour ton probleme. Je crois qu'elle est la supperiuere .

    A+
    Fichiers attachés Fichiers attachés

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    349
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Avril 2006
    Messages : 349
    Par défaut
    Salut,

    Tu as une erreur ou une exception qui est produite ?

    J'ai bossé avec le FileSystemWatcher et je n'ai pas observé de blocage du fichier. C'est pas plutôt le traitement que tu effectues après qui bloque le fichier ?

    L'application que je développais était un "Tail", et pas de blocage alors qu'une autre application écrivait sans arrêt dans ce fichier...

    ++

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    499
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 499
    Par défaut
    Bonjour,

    merci pour vos réponses.

    scifire, je vais regarder ce que tu m'envoies

    Je viens de me repencher sur le pb, parce que ça a bien marché pendant 10 jours, et puis là, ça rebug...

    et c'est halucinant ce qui se produit...
    en fait, la copie dans le fichier du FileSystemWatcher ne s'effectue pas, mais il n'y a pas d'erreur ou d'exception levée... Le FileSystemWatcher boquerait-il le répertoire?...

    et mes fichiers qui n'ont pas pu être copiés dans ce répertoire ATransferer se retrouve dans le fichier de destination dans lequel la méthode du FileSystemWatcher doit les copier sauf que j'exécute en pas à pas et ça passe pas dedans ni dans ma méthode de copie de fichiers...
    le hic, c'est que dans le répertoire de destination, il y a une arborescence et les fichiers ne sont pas mis dedans mais à la racine...

    bizarre bizarre ce truc...

    il va faloir que je remédie à cela...
    je pense que je vais finir par supprimer le FileSystemWatcher et appeler sa méthode directement dans l'appli...

    à +

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    499
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 499
    Par défaut
    scifire,

    j'ai regardé le projet que tu avais posté,
    j'avais bien noté le problème d'accès aux fichiers,
    j'ai fait un truc dans le même genre que toi pour être sûr d'avoir l'accès,
    ça vient d'ailleurs...
    ça doit être le répertoire qui est bloqué...

  6. #6
    Membre expérimenté Avatar de scifire
    Inscrit en
    Juillet 2004
    Messages
    226
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 226
    Par défaut
    Salut.
    En dix minutes voila ce que j'ai fait :
    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    namespace Watcher
    {
        class Program
        {
            static void Main(string[] args)
            {
                string dirPath = @"C:\watcher\";
                DirectoryWatcher w = new DirectoryWatcher(dirPath);
                w.FileHandler = ProcessSingleFile;
                w.Start();
            }
     
            private static bool ProcessSingleFile(string fName)
            {
                bool processed = false;
                try
                {
                    // TODO : Handle the file
                    // TODO : Copy/Move/Delete
                    processed = true;
                }
                catch
                {
                    processed = false;
                    throw;
                }
     
                return processed;
            }
        }
     
        class DirectoryWatcher
        {
            #region Constructors
     
            public DirectoryWatcher(string path)
            {
                this.dirPath = path;
            }
     
            #endregion
     
            #region Fields
     
            private static Thread task = null;
            private static volatile bool running = true;
            private static readonly int timeToSleep = 1000;
     
            public delegate bool ProcessFile(string filename);
     
            #endregion
     
            #region Properties
     
            private string dirPath;
     
            public string DirectoryPath
            {
                get { return dirPath; }
                set { dirPath = value; }
            }
     
            private ProcessFile fileHandler;
     
            public ProcessFile FileHandler
            {
                get { return fileHandler; }
                set { fileHandler = value; }
            }
     
            #endregion
     
            #region Public Methods
     
            public void Start()
            {
                running = true;
     
                ThreadStart thStart = ProcessFiles;
                task = new Thread(thStart);
                task.Start();
            }
     
            public void Stop()
            {
                running = false;
     
                // Will block here until all currently readed files are processed.
                task.Join();
            }
     
            public void ProcessFiles()
            {
                while (running)
                {
                    string[] files = Directory.GetFiles(dirPath);
                    if (files.Length > 0)
                    {
                        foreach (string fName in files)
                        {
                            bool success = FileHandler(fName);
                            if (success)
                            {
                                Console.WriteLine("File is processed");
                            }
                            else
                            {
                                Console.WriteLine("Error processing file.");
                            }
                        }
                    }
                    Thread.Sleep(timeToSleep);
                }
            }
     
            #endregion
        }
    }
    C'est tres simple mais si tu ajoutes une propriete filtre (string filter - *.txt - par exemple) et encore quelques petits details tu auras un "FileSystemWatcher" qui foncionnera mieux que celui propose par .NET. Ne t'inquite pas pour le polling a une seconde. La methode GetFiles de Directory ne prend qu'une milliseconde dans le cas ou tu as 100 fichiers. Alors le temps pour le polling est negligeable. De plus tu peux toujours parametriser cette valeur

    Bon courage
    A+

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

Discussions similaires

  1. Désactiver la multi-sélection d'une grille
    Par Riko dans le forum Composants VCL
    Réponses: 6
    Dernier message: 17/06/2003, 09h47
  2. Comment désactiver Ctrl+Alt+Del sous Windows XP
    Par ETOKA dans le forum API, COM et SDKs
    Réponses: 6
    Dernier message: 04/06/2003, 13h34
  3. Désactivation de la souris
    Par mika dans le forum API, COM et SDKs
    Réponses: 6
    Dernier message: 13/03/2003, 13h15
  4. Désactiver les touches F1, F2, F3, F4, F5 dans IE
    Par ZiZouJH dans le forum Flash
    Réponses: 7
    Dernier message: 17/02/2003, 09h59
  5. Réponses: 8
    Dernier message: 17/05/2002, 09h08

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