Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    [C#] filewatcher considera duplica gli eventi

    Buongiorno a tutti,

    sto scrivendo un semplice filewatcher che monitori una cartella ed esegua dei comandi ogni volta che un file nella cartella viene modificato (nello specifico i file vengono sovrascritti via ftp).

    questa è la classe che viene chiamata:

    codice:
    private static void OnChanged(object source, FileSystemEventArgs e)
        {
           .
            Console.WriteLine("File: " + e.Name + " " + e.ChangeType);
            // the resto of the commands that are executed when a file is overwritten
        }
    e questa è la porzione di codice nella quale si richiama la classe

    codice:
     public static void Run()
        {
            string pathToWatch = "C:\\Documents and Settings\\aa";
            FileSystemWatcher watcher = new FileSystemWatcher();
            watcher.Path = pathToWatch;
            watcher.NotifyFilter = NotifyFilters.LastWrite
               | NotifyFilters.FileName | NotifyFilters.DirectoryName;
            watcher.Changed += new FileSystemEventHandler(OnChanged);
    
            watcher.EnableRaisingEvents = true;
    
        }
    il problema è che ogni volta che un file viene modificato, l'avviso su console appare due volte di seguito e i comandi vengono eseguiti due volte (in questo caso vengono aperte due istanze di matlab).

    Ora, al problema può essere messa una pezza in diversi modi, ma come mai succede così?

    grazie anticipate!

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,463

    Moderazione

    I linguaggi Visual Basic 6, VBA (Visual Basic for Applications), Visual Basic .NET, C# e altri linguaggi basati sul .NET Framework sono trattati nell'area dedicata.

    Sposto la discussione e invito a postare in questa sezione le discussioni che riguardano i linguaggi citati.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,536

    Re: [C#] filewatcher considera duplica gli eventi

    Originariamente inviato da sowdust
    Buongiorno a tutti,

    sto scrivendo un semplice filewatcher che monitori una cartella ed esegua dei comandi ogni volta che un file nella cartella viene modificato (nello specifico i file vengono sovrascritti via ftp).

    questa è la classe che viene chiamata:

    codice:
    private static void OnChanged(object source, FileSystemEventArgs e)
        {
           .
            Console.WriteLine("File: " + e.Name + " " + e.ChangeType);
            // the resto of the commands that are executed when a file is overwritten
        }
    e questa è la porzione di codice nella quale si richiama la classe

    codice:
     public static void Run()
        {
            string pathToWatch = "C:\\Documents and Settings\\aa";
            FileSystemWatcher watcher = new FileSystemWatcher();
            watcher.Path = pathToWatch;
            watcher.NotifyFilter = NotifyFilters.LastWrite
               | NotifyFilters.FileName | NotifyFilters.DirectoryName;
            watcher.Changed += new FileSystemEventHandler(OnChanged);
    
            watcher.EnableRaisingEvents = true;
    
        }
    il problema è che ogni volta che un file viene modificato, l'avviso su console appare due volte di seguito e i comandi vengono eseguiti due volte (in questo caso vengono aperte due istanze di matlab).

    Ora, al problema può essere messa una pezza in diversi modi, ma come mai succede così?

    grazie anticipate!
    ciao, ti viene notificato una volta per ogni azione, ovvero immaginando che modifichi un nome file, ne hai uno per "NotifyFilters.FileName " e uno per "NotifyFilters.LastWrite". o almeno così dovrebbe essere.

    :copiaIncollaInside:

  4. #4
    Mi scuso innanzitutto se ho postato nella sezione sbagliata e ringrazio per le risposte!
    Purtroppo però avevo pensato anch'io che potesse essere la dobbia presenza di notify.lastAccess e lastWrite a creare problemi, così ne ho lasciato solo uno, ma il problema ha persistito. FileName e DirectoryName in teoria non vengono modificati quando un file viene sovrascritto; ho provato a toglierli comunque ma il risultato è sempre lo stesso!

  5. #5
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,536
    se ti serve avere un unico passaggio quando sovrascritto, prova ad usare solo NotifyFilters.Attributes, dovrebbe chiamare una sola volta.

  6. #6
    ciao U235 e grazie ancora del supporto; purtroppo però le cose non cambiano nemmeno così!
    Fortunatamente ho notato che se il file viene sovrascritto, l'evento è notificato una volta sola, mentre se il file modificato e poi salvato (come facevo io per testare), l'evento viene notificato due volte.
    Non dovrebbero esserci problemi pratici per me, però sarei ancora curioso di capire come mai succede così, anche perché così non so quanto il programma possa essere affidabile!

  7. #7
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,536
    Originariamente inviato da sowdust
    ciao U235 e grazie ancora del supporto; purtroppo però le cose non cambiano nemmeno così!
    Fortunatamente ho notato che se il file viene sovrascritto, l'evento è notificato una volta sola, mentre se il file modificato e poi salvato (come facevo io per testare), l'evento viene notificato due volte.
    Non dovrebbero esserci problemi pratici per me, però sarei ancora curioso di capire come mai succede così, anche perché così non so quanto il programma possa essere affidabile!


    dalla documentazione msdn (grossomodo...):

    lo spostamento di un file è un'operazione complessa che è costituita da più operazioni semplici, pertanto, solleva più eventi. Allo stesso modo, alcune applicazioni (per esempio, il software antivirus) potrebbe causare ulteriori eventi del file system che vengono rilevati dal FileSystemWatcher.

    bisognerebbe vedere come reagisce in produzione, ma credo che li ne lanci 1 sola...
    forse anche il modo di salvare del blocco note, chissa...

    spero di esserti stato utile

  8. #8
    sì avevo pensato anch'io che magari il salvataggio via blocco note avvenisse in due passaggi invece che uno... l'importante è che sia affidabile per quanto riguarda i file che vengono sovrascritti!
    Grazie ancora per il supporto!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.