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#] Pb FileWatcher, FileSystemEventHandler


Sujet :

Windows Forms

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 4
    Points : 2
    Points
    2
    Par défaut [C#] Pb FileWatcher, FileSystemEventHandler
    Bonjour,
    j'ai un soucis et je n'arrive pas a comprendre ce que je fais mal. Je suis nouveau en C#, ca fait 3 heures : que je cherche une soluce mais trouvé personne qui voulait faire exactement comme moi.

    Ce que je veux faire c'est faire un filewatcher qui vérifie la création de nouveau fichier dat dans un dossier et qui qd il en trouve un, lance l'import.

    J'ai écris le code que je vais coller plus bas mais en fait le prog se déroule bien jusqu'a la ligne "this._fileSystemWatcher.Created += new FileSystemEventHandler(OnCreate);". La il ne passe jamais dans OnCreate, il passe la ligne et c tout.
    Je précise que le code passe la compilation sans erreur.

    Je n'ai pas encore fais mais je voudrais aussi que le filewatcher continue de tourner après cet import, je sais pas encore comment je vais faire, si vous avez une piste...c cool

    Merci a tous en tout cas.

    Arnaud

    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
    //appel de la classe :
    FileWatcher fw = new FileWatcher();
    fw.Start();
     
     
    //classe :
    public class FileWatcher
    {
    	private FileSystemWatcher _fileSystemWatcher;
    	private Form1 _form;
     
    	public void Start()
    	{
    		_form = new Form1();
    		string dirInbox = "C:\\temp\\";
    		if (System.IO.Directory.Exists(dirInbox))
    		{
    			try
    			{
    				this._fileSystemWatcher = new FileSystemWatcher(dirInbox);
    			}
    			catch(IOException e)
    			{
    				_form.ShowInTextBox("The file watcher cannot scan folder : " + dirInbox + "------> " + e.Message);
    			}
    		}
    		else
    		{
    			_form.ShowInTextBox("The folder to scan doesn't exist : " + dirInbox);
    		}
    		this._fileSystemWatcher.NotifyFilter = NotifyFilters.FileName;
    		this._fileSystemWatcher.Filter = "*.dat";
    		this._fileSystemWatcher.IncludeSubdirectories = false;
    		this._fileSystemWatcher.EnableRaisingEvents = true;
     
     
    		WaitForChangedResult waitResult =this._fileSystemWatcher.WaitForChanged(WatcherChangeTypes.All);
    		if( waitResult.ChangeType == WatcherChangeTypes.Created)
    		{
    			this._fileSystemWatcher.Created += new FileSystemEventHandler(OnCreate);
    			this._fileSystemWatcher.EnableRaisingEvents = true;
    		}
    	}
     
    	public void Stop()
    	{
    		if (this._fileSystemWatcher!=null)
    		{
    			this._fileSystemWatcher.EnableRaisingEvents = false;
    			this._fileSystemWatcher.Created -= new FileSystemEventHandler(OnCreate);
    		}
    	}
     
    	public void OnCreate(Object o, FileSystemEventArgs ea)
    	{
    		lock(this)
    		{
    			try
    			{
    				Import launchImport = new Import();
    				launchImport.onFileCreatedProcess(ea.Name.ToString());
    			}
    			catch (Exception exc)
    			{
    				_form.ShowInTextBox("Problem on Create : " + ea.Name.ToString() + "--------->" + exc.Message);
    			}
    		}
    	}
    }

  2. #2
    Membre expérimenté
    Avatar de freddyboy
    Homme Profil pro
    Architecte technique
    Inscrit en
    Novembre 2003
    Messages
    810
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Novembre 2003
    Messages : 810
    Points : 1 696
    Points
    1 696
    Par défaut
    c'est l'exemple de la faq : http://faqcsharp.developpez.com/?page=file#file_watcher

    peut etre que cela peut te mettre sur la voix...

    @+
    Someday I will be the most powerful Jedi !

    Freddyboy - Blog

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Oui mais
    Salut freddyBoy,

    merci pour ta réponse en tout cas.
    On est bien d'accord, c'est un topic que j'avais déja lu et suivi pour créer mon watcher. Et comme tu peux le voir dans mon code, j'ai suivi ca, j'ai l'impression de faire la même chose en tout cas. Mais moi dans mon code, le OnCreate n'est jamais lancé alors que dans l'exmple, le fw.Created += new FileSystemEventHandler(OnChanged); execute bien la methode OnChanged... Et je ne comprends pas pourquoi...

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2003
    Messages : 105
    Points : 134
    Points
    134
    Par défaut
    Je ne sais pas si j'interprète mal ta phrase, mais :

    le prog se déroule bien jusqu'a la ligne "this._fileSystemWatcher.Created += new FileSystemEventHandler(OnCreate);". La il ne passe jamais dans OnCreate, il passe la ligne et c tout.
    Je précise que le code passe la compilation sans erreur.
    Cette ligne de code permet seulement d'abonner OnCreate à _fileSystemWatcher.Created, c'est normal que ça passe la ligne sans appeler OnCreate. OnCreate sera appelée lorsque l'événement Created sera déclenché.

    a+

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Salut Smikar,
    Oui en effet, le OnCreate ne doit etre lancé uniquement quand un fichier est créé.
    La ligne d'avant, (WaitForChanged) est la ligne qui attend la création donc quand je créé mon fichier, c'est le WaitForChanged qui recoit l'évenement et il passe la ligne donc je vérifie que c'est bien une création ("waitResult.ChangeType == WatcherChangeTypes.Created") et après, je voudrais qu'il lance mon Oncreate mais il doit attendre une autre création peut etre... a cause du "this._fileSystemWatcher.Created += new FileSystemEventHandler(OnCreate); ".
    Je pense que mon problem c'est que je dois mal utiliser le WaitForChanged mais je n'ai pas trouvé d'exemple de gens qui utilisent le waitForChanged et qui lance une fonction. Tous font juste un affichage de la modif mais pas de lancement de fonction...

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2003
    Messages : 105
    Points : 134
    Points
    134
    Par défaut
    Hello,

    c'est normal que OnCreate ne soit pas appelée. Comme je te l'ai dit, t'abonner à un événement ne veut pas dire appeler la méthode. Dans ton cas, lorsque le fichier est créé, ta méthode n'est pas encore abonnée (tu l'abonnes après avoir détecté la création du fichier !).

    Tu peux donc : 1) abonner ta méthode plus tôt dans le code 2) appeler directement OnCreate apres ton test if, si le but est que OnCreate ne soit appelée que la première fois.

    a+

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 4
    Points : 2
    Points
    2
    Par défaut De la bombe!
    Hey Smikar,

    Nickel, ct bien ca, j'abonnais ma méthode après detection de l'event. J'ai déplacé la ligne "this._fileSystemWatcher.Created += new FileSystemEventHandler(OnCreate);" avant le WaitForChanged et ca fonctionne nickel maintenant.

    Merci pour la réponse, ct mon premier post et j'ai eu une réponse. Ce ne sera pas le dernier!

    Merci beaucoup

    Arnaud

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

Discussions similaires

  1. Service et fileWatcher
    Par topolino dans le forum Windows Forms
    Réponses: 0
    Dernier message: 02/06/2009, 15h01
  2. SSIS FTP Task : comment faire un FileWatcher ?
    Par Mathusalem dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 05/03/2009, 12h49
  3. filewatcher sur treeview
    Par alexlechevalier dans le forum C#
    Réponses: 1
    Dernier message: 21/03/2008, 09h25

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