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 :

.net / VS2008 / winForm : FileSystemWatcher et l'éditeur VS2008 ?


Sujet :

C#

  1. #1
    Membre Expert Avatar de Lorenzo77
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    1 472
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 472
    Par défaut .net / VS2008 / winForm : FileSystemWatcher et l'éditeur VS2008 ?
    salut,


    comportement bizarre de VS2008 ...
    je viens de finir ma petite application qui doit sauvegarder toutes les modifications des fichiers d'un répertoire.
    son fonctionnement est simple, un FileSystemWatcher est lancé sur le répertoire a surveiller, si un fichier est modifié alors une copie de ce fichier est placé dans un répertoire de destination avec un N° de version pour garder tout l'historique des modifications.
    il y a tout un paquet d'options pour filtrer les fichiers qui doivent être sauvegardés : extensions, nom, ... etc
    pour l'instant j'ai 2 répertoires a surveiller :
    1-le répertoire htdocs de Apache ... dedans on trouve tous les fichiers WEB (PHP/HTML/JS/CSS/AS + projets Flex + haxe + ...)
    2-le répertoire projets de VS2008

    les fichiers du répertoire N°1 sont modifiés/édités avec Editplus (mon éditeur de texte), tout fonctionne parfaitement.
    j'ai aussi testé la sauvegarde avec Flex, dreamweaver, notepad ... etc, tout est nickel, le comportement est exactement celui espéré.

    les fichiers du répertoire N°2 sont modifiés/édités avec VS2008 et la ca merdouille ... a aucun moment le programme n'est capable de détecter un changement dans les fichiers *.cs *.resx ... de l'ouverture de VS a sa fermeture
    a la place je détecte des changements dans des fichiers xxxxx.tmp qui n'existent pas (vérifié avec FileInfo.Exists()) et c'est tout


    voici un log de l'appli quand je sauvegarde le fichier test_thread4\form1.cs avec VS2008 (il n'y a qu'une seule sauvegarde qui déclenche ces 7 évènements, mais ceci est encore une autre histoire)

    Declenchement : (vendredi 03 octobre 2008 18:19:54.0156) Projets VS2008 a surveiller
    C:\Documents and Settings\lolo\Mes documents\Visual Studio 2008\Projects\test_thread4\ve-2BE3.tmp
    Changed
    Refus : (vendredi 03 octobre 2008 18:19:54.0312) Projets VS2008 a surveiller
    C:\Documents and Settings\lolo\Mes documents\Visual Studio 2008\Projects\test_thread4\ve-2BE3.tmp
    Le fichier n'existe pas !??

    Declenchement : (vendredi 03 octobre 2008 18:19:54.0312) Projets VS2008 a surveiller
    C:\Documents and Settings\lolo\Mes documents\Visual Studio 2008\Projects\test_thread4\ve-2BE3.tmp
    Changed
    Refus : (vendredi 03 octobre 2008 18:19:54.0312) Projets VS2008 a surveiller
    C:\Documents and Settings\lolo\Mes documents\Visual Studio 2008\Projects\test_thread4\ve-2BE3.tmp
    Temps trop court !

    Declenchement : (vendredi 03 octobre 2008 18:19:54.0312) Projets VS2008 a surveiller
    C:\Documents and Settings\lolo\Mes documents\Visual Studio 2008\Projects\test_thread4\ve-2BE3.tmp
    Changed
    Refus : (vendredi 03 octobre 2008 18:19:54.0312) Projets VS2008 a surveiller
    C:\Documents and Settings\lolo\Mes documents\Visual Studio 2008\Projects\test_thread4\ve-2BE3.tmp
    Temps trop court !

    Declenchement : (vendredi 03 octobre 2008 18:19:54.0312) Projets VS2008 a surveiller
    C:\Documents and Settings\lolo\Mes documents\Visual Studio 2008\Projects\test_thread4
    Changed
    Refus : (vendredi 03 octobre 2008 18:19:54.0312) Projets VS2008 a surveiller
    C:\Documents and Settings\lolo\Mes documents\Visual Studio 2008\Projects\test_thread4
    Le fichier n'existe pas !??

    Declenchement : (vendredi 03 octobre 2008 18:19:54.0312) Projets VS2008 a surveiller
    C:\Documents and Settings\lolo\Mes documents\Visual Studio 2008\Projects\test_thread4\Form1.cs~RF38e59406.TMP
    Changed
    Refus : (vendredi 03 octobre 2008 18:19:54.0468) Projets VS2008 a surveiller
    C:\Documents and Settings\lolo\Mes documents\Visual Studio 2008\Projects\test_thread4\Form1.cs~RF38e59406.TMP
    Le fichier n'existe pas !??

    Declenchement : (vendredi 03 octobre 2008 18:19:54.0468) Projets VS2008 a surveiller
    C:\Documents and Settings\lolo\Mes documents\Visual Studio 2008\Projects\test_thread4
    Changed
    Refus : (vendredi 03 octobre 2008 18:19:54.0468) Projets VS2008 a surveiller
    C:\Documents and Settings\lolo\Mes documents\Visual Studio 2008\Projects\test_thread4
    Temps trop court !

    Declenchement : (vendredi 03 octobre 2008 18:19:54.0468) Projets VS2008 a surveiller
    C:\Documents and Settings\lolo\Mes documents\Visual Studio 2008\Projects\test_thread4
    Changed
    Refus : (vendredi 03 octobre 2008 18:19:54.0468) Projets VS2008 a surveiller
    C:\Documents and Settings\lolo\Mes documents\Visual Studio 2008\Projects\test_thread4
    Temps trop court !
    si j'ouvre le fichier test_thread4\form1.cs avec un éditeur de texte juste aprés sa sauvegarde avec VS2008, je vois bien les modifications apportées ... alors pourquoi le FileSystemWatcher est il incapable de détecter le moindre changement sur ce fichier ?
    et pourquoi un tel comportement de VS2008 ?


    je me prend la tète avec ce problème depuis un paquet de jours maintenant ... si vous avez des idées pour corriger ce probleme/comportement, je suis preneur.

    merci.



    la déclaration du FileSystemWatcher :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    _fileSystemWatcher = new FileSystemWatcher();
    _fileSystemWatcher.Path = _repertoireRacineSurveillance;
    _fileSystemWatcher.IncludeSubdirectories = inclureSousRepertoires;
    _fileSystemWatcher.NotifyFilter = NotifyFilters.LastWrite;
    try {
       _fileSystemWatcher.Filter = filtre;
    } catch( Exception exFiltre ) {
       throw new Exception("La valeur de l'argument 'filtre' n'est pas valable" + Environment.NewLine + exFiltre.Message, exFiltre.InnerException);
    }
     
    _fileSystemWatcher.Changed += new System.IO.FileSystemEventHandler(this.evtFileSystemWatcherChanged);

    l'evenement du FileSystemWatcher :
    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
    private void evtFileSystemWatcherChanged(object sender, System.IO.FileSystemEventArgs e)
    {
       if( Declenchement != null ) {
          Declenchement(this, new SurveillanceEventArgs(e.FullPath, e.ChangeType.ToString()));
       }
     
       // TEST INTERVAL TEMPS
       if( accesFichier.ContainsKey(e.FullPath) == false ) {
          accesFichier.Add(e.FullPath, DateTime.Now.Ticks);
       } else {
          if( DateTime.Now.Ticks - accesFichier[e.FullPath] < 3000000 ) {// 3/10eme de seconde
             accesFichier[e.FullPath] = DateTime.Now.Ticks;
             if( RaisonRefus != null ) {
                RaisonRefus(this, new SurveillanceEventArgs(e.FullPath, "Temps trop court !"));
             }
             return;
          }
          accesFichier[e.FullPath] = DateTime.Now.Ticks;
       }
     
       // VERIFIER PRÉSENCE ....
       FileInfo fi = new FileInfo(e.FullPath);
       if( fi.Exists == false ) {
          if( RaisonRefus != null ) {
             RaisonRefus(this, new SurveillanceEventArgs(fi.FullName, "Le fichier n'existe pas !"));
          }
          return;
       }
     
       // VERIFIER EXTENSIONS 
       string ext = fi.Extension.ToLower(CultureInfo.CurrentCulture);
       if( (_extensions.IndexOf(ext) == -1) && _extensions.IndexOf(".*") == -1 ) {
          if( RaisonRefus != null ) {
             RaisonRefus(this, new SurveillanceEventArgs(fi.FullName, "L'extension du fichier n'est pas dans la liste."));
          }
          return;
       }
     
       // FichierVersion.sauverVersion()
       FichierVersion fichier = new FichierVersion();
       fichier.Sauvegarde += new EventHandler<SurveillanceEventArgs>(fichier_Sauvegarde);
       fichier.RaisonRefus += new EventHandler<SurveillanceEventArgs>(fichier_RaisonRefus);
       fichier.fichierSource = e.FullPath;
       fichier.repertoireRacineSurveillance = this._repertoireRacineSurveillance;
       fichier.repertoireRacineSauvegarde = this._repertoireRacineSauvegarde;
       fichier.sauverVersion();
    }

  2. #2
    Membre Expert Avatar de Lorenzo77
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    1 472
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 472
    Par défaut
    je vais me donner la soluce

    enfin de compte il y a un ou des bugs dans le FileSystemWatcher et particulierement avec la propriété NotifyFilter suivant la ou les valeurs choisis ...
    ex : NotifyFilters.LastWrite est censé observer la date de la derniere écriture dans un fichier ... ben non ... marche pas a tous les coups


    si ca vous interesse, j'ai fait une appli pour tester a fond FileSystemWatcher :



    TesteurFileSystemWatcher :
    http://complet1.free.fr/_divers/foru...temWatcher.rar

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

Discussions similaires

  1. VS2008 Winform MDIparent
    Par aiglelibre dans le forum Windows Forms
    Réponses: 1
    Dernier message: 03/05/2012, 16h49
  2. Réponses: 10
    Dernier message: 28/07/2009, 15h05
  3. .net / VS2008 / winForm : ListViewGroup
    Par Lorenzo77 dans le forum C#
    Réponses: 2
    Dernier message: 06/10/2008, 12h06
  4. Compatibilité composant .net Vcl/winform
    Par monmien dans le forum Composants VCL
    Réponses: 1
    Dernier message: 26/05/2005, 07h56

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