Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1

    [C#] Monitoraggio directory

    dovrei fare un programmino per console che in sostanza mi monitora una determinata directory e mi avverte quando ci sono dei cambiamente.
    cioè, se qualcuno modifica/elimina/crea un file/directory dentro la directory specificata mi avverte dandomi anche il nome del file/directory modificata/eliminata/creata.
    ho però vari dubbi.
    penso che il programma debba essere multithread in quanto ci sono possono essere anche più operazioni contemporanee, giusto?
    l'altro dubbio riguarda il monitoraggio vero e proprio.
    come posso "vedere" se sono state apportate delle modifiche e capire quali tipo di modifiche sono state apportate?

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    Originariamente inviato da fermat
    penso che il programma debba essere multithread in quanto ci sono possono essere anche più operazioni contemporanee, giusto?
    Non necessariamente: potresti eseguire le operazioni di gestioni dei cambiamenti anche in blocco, e sequenzialmente.

    Originariamente inviato da fermat
    come posso "vedere" se sono state apportate delle modifiche e capire quali tipo di modifiche sono state apportate?
    Vedi FileSystemWatcher.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

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

  3. #3
    si infatti ripensandoci nn è per forz necessario il multithread.
    per ora lo lascio perdere.

    grazie per il link.
    sul libro che ho sotto mano nn era segnalato.
    vediamo che riesco a fare!

  4. #4
    mi sa che sto facendo qualcosa di sbagliato.
    allora.
    il programma parte da Program.cs:
    codice:
    using System;
    using System.Text;
    using System.IO;
    
    namespace DirectoryMonitor
    {
        class Program
        {
            static void Main()
            {
                //Console.WriteLine("Immetti il percorso di una directory");
                //string path = Console.ReadLine();
                string path = "J:\\Matteo";
                DirectoryInfo dir = new DirectoryInfo(path);
                if (dir.Exists)
                {
                    DirMonitor dm = new DirMonitor(path);
                }
                else
                {
                    throw new DirectoryNotFoundException("Directory non trovata: " + dir);
                }
            }
        }
    }
    la classe DirMonitor è questa qua:
    codice:
    using System;
    using System.Text;
    using System.IO;
    
    namespace DirectoryMonitor
    {
        class DirMonitor
        {
            public DirMonitor(string controlDir)
            {
                FileSystemWatcher fw = new FileSystemWatcher();
                fw.Path = controlDir;
                fw.IncludeSubdirectories = true;
                fw.NotifyFilter = NotifyFilters.FileName | 
                    NotifyFilters.Attributes | 
                    NotifyFilters.LastAccess |
                    NotifyFilters.LastWrite |
                    NotifyFilters.Security |
                    NotifyFilters.Size;
                fw.Changed += new FileSystemEventHandler(OnFileEvent);
                fw.Created += new FileSystemEventHandler(OnFileEvent);
                fw.Deleted += new FileSystemEventHandler(OnFileEvent);
            }
    
            private void OnFileEvent(object source, FileSystemEventArgs fsevent)
            {
                DateTime dt = new DateTime();
                dt = System.DateTime.UtcNow;
                Console.WriteLine("Path: " + fsevent.FullPath + " " + fsevent.ChangeType.ToString() + " at " + dt.ToLocalTime());
            }
        }
    }
    quando lancio il programma mi esce tutta questa bella roba qua:
    codice:
    'DirectoryMonitor.vshost.exe' (Gestito (v4.0.30319)): 'C:\Windows\Microsoft.Net\assembly\GAC_32\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll' caricato, caricamento simboli ignorato. Il modulo è ottimizzato e l'opzione 'Just My Code' del debugger è abilitata.
    'DirectoryMonitor.vshost.exe' (Gestito (v4.0.30319)): 'C:\Windows\assembly\GAC_MSIL\Microsoft.VisualStudio.HostingProcess.Utilities\10.0.0.0__b03f5f7f11d50a3a\Microsoft.VisualStudio.HostingProcess.Utilities.dll' caricato, caricamento simboli ignorato. Il modulo è ottimizzato e l'opzione 'Just My Code' del debugger è abilitata.
    'DirectoryMonitor.vshost.exe' (Gestito (v4.0.30319)): 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Windows.Forms\v4.0_4.0.0.0__b77a5c561934e089\System.Windows.Forms.dll' caricato, caricamento simboli ignorato. Il modulo è ottimizzato e l'opzione 'Just My Code' del debugger è abilitata.
    'DirectoryMonitor.vshost.exe' (Gestito (v4.0.30319)): 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Drawing\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Drawing.dll' caricato, caricamento simboli ignorato. Il modulo è ottimizzato e l'opzione 'Just My Code' del debugger è abilitata.
    'DirectoryMonitor.vshost.exe' (Gestito (v4.0.30319)): 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System\v4.0_4.0.0.0__b77a5c561934e089\System.dll' caricato, caricamento simboli ignorato. Il modulo è ottimizzato e l'opzione 'Just My Code' del debugger è abilitata.
    'DirectoryMonitor.vshost.exe' (Gestito (v4.0.30319)): 'C:\Windows\assembly\GAC_MSIL\Microsoft.VisualStudio.HostingProcess.Utilities.Sync\10.0.0.0__b03f5f7f11d50a3a\Microsoft.VisualStudio.HostingProcess.Utilities.Sync.dll' caricato, caricamento simboli ignorato. Il modulo è ottimizzato e l'opzione 'Just My Code' del debugger è abilitata.
    'DirectoryMonitor.vshost.exe' (Gestito (v4.0.30319)): 'C:\Windows\assembly\GAC_MSIL\Microsoft.VisualStudio.Debugger.Runtime\10.0.0.0__b03f5f7f11d50a3a\Microsoft.VisualStudio.Debugger.Runtime.dll' caricato, caricamento simboli ignorato. Il modulo è ottimizzato e l'opzione 'Just My Code' del debugger è abilitata.
    'DirectoryMonitor.vshost.exe' (Gestito (v4.0.30319)): 'E:\Project\C#\DirectoryMonitor\DirectoryMonitor\bin\Debug\DirectoryMonitor.vshost.exe' caricato, caricamento simboli ignorato. Il modulo è ottimizzato e l'opzione 'Just My Code' del debugger è abilitata.
    'DirectoryMonitor.vshost.exe' (Gestito (v4.0.30319)): 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Core\v4.0_4.0.0.0__b77a5c561934e089\System.Core.dll' caricato, caricamento simboli ignorato. Il modulo è ottimizzato e l'opzione 'Just My Code' del debugger è abilitata.
    'DirectoryMonitor.vshost.exe' (Gestito (v4.0.30319)): 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Xml.Linq\v4.0_4.0.0.0__b77a5c561934e089\System.Xml.Linq.dll' caricato, caricamento simboli ignorato. Il modulo è ottimizzato e l'opzione 'Just My Code' del debugger è abilitata.
    'DirectoryMonitor.vshost.exe' (Gestito (v4.0.30319)): 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Data.DataSetExtensions\v4.0_4.0.0.0__b77a5c561934e089\System.Data.DataSetExtensions.dll' caricato, caricamento simboli ignorato. Il modulo è ottimizzato e l'opzione 'Just My Code' del debugger è abilitata.
    'DirectoryMonitor.vshost.exe' (Gestito (v4.0.30319)): 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\Microsoft.CSharp\v4.0_4.0.0.0__b03f5f7f11d50a3a\Microsoft.CSharp.dll' caricato, caricamento simboli ignorato. Il modulo è ottimizzato e l'opzione 'Just My Code' del debugger è abilitata.
    'DirectoryMonitor.vshost.exe' (Gestito (v4.0.30319)): 'C:\Windows\Microsoft.Net\assembly\GAC_32\System.Data\v4.0_4.0.0.0__b77a5c561934e089\System.Data.dll' caricato, caricamento simboli ignorato. Il modulo è ottimizzato e l'opzione 'Just My Code' del debugger è abilitata.
    'DirectoryMonitor.vshost.exe' (Gestito (v4.0.30319)): 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Xml\v4.0_4.0.0.0__b77a5c561934e089\System.Xml.dll' caricato, caricamento simboli ignorato. Il modulo è ottimizzato e l'opzione 'Just My Code' del debugger è abilitata.
    Il thread 'vshost.NotifyLoad' (0x774) è terminato con il codice 0 (0x0).
    Il thread '<Nessun nome>' (0x8c0) è terminato con il codice 0 (0x0).
    Il thread 'vshost.LoadReference' (0x5a8) è terminato con il codice 0 (0x0).
    'DirectoryMonitor.vshost.exe' (Gestito (v4.0.30319)): caricato 'E:\Project\C#\DirectoryMonitor\DirectoryMonitor\bin\Debug\DirectoryMonitor.exe', simboli caricati.
    Il thread 'vshost.RunParkingWindow' (0xa94) è terminato con il codice 0 (0x0).
    Il thread '<Nessun nome>' (0xd98) è terminato con il codice 0 (0x0).
    Il programma '[3908] DirectoryMonitor.vshost.exe: Traccia programma' è terminato con il codice 0 (0x0).
    Il programma '[3908] DirectoryMonitor.vshost.exe: Gestito (v4.0.30319)' è terminato con il codice 0 (0x0).

  5. #5
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    Originariamente inviato da fermat
    quando lancio il programma mi esce tutta questa bella roba qua [...]
    Non vedo nulla di anormale nel log, infatti non accade nulla di particolare.

    Guardando il codice della tua applicazione, il programma si avvia, tu crei il "monitor" per la tua directory, poi non ci sono altre istruzioni quindi il programma termina immediatamente e quindi si chiude.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

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

  6. #6
    si in effetti hai ragione.
    ho modificato mettendo un ciclo while infinito per tenerlo avviato.
    poi sono entrato nella directory e ho modificato il nome di un file.
    questo è il risultato:
    codice:
    Path: J:\Matteo\driveridentifier_setup.exe Changed at 29/09/2011 13:24:16
    Path: J:\Matteo\driveridentifier_setup.exe Changed at 29/09/2011 13:24:16
    Path: J:\Matteo\driveridentifier_setup.exe Changed at 29/09/2011 13:24:16
    Path: J:\Matteo\driveridentifier_setup.exe Changed at 29/09/2011 13:24:17
    Path: J:\Matteo\driveridentifier_setup.exe Changed at 29/09/2011 13:24:17
    Path: J:\Matteo\driveridentifier_setup.exe Changed at 29/09/2011 13:24:17
    Path: J:\Matteo\driveridentifier_setup.exe Changed at 29/09/2011 13:24:17
    Path: J:\Matteo\driveridentifier_setup.exe Changed at 29/09/2011 13:24:17
    Path: J:\Matteo\driveridentifier_setup.exe Changed at 29/09/2011 13:24:17
    Path: J:\Matteo\driveridentifier_setup.exe Changed at 29/09/2011 13:24:17
    Path: J:\Matteo\driveridentifier_setup.exe Changed at 29/09/2011 13:24:17
    Path: J:\Matteo\driveridentifier_setup.exe Changed at 29/09/2011 13:24:17
    Path: J:\Matteo\driveridentifier_setup.exe Changed at 29/09/2011 13:24:17
    Path: J:\Matteo\driveridentifier_setup.exe Changed at 29/09/2011 13:24:17
    Path: J:\Matteo\driveridentifier_setup.exe Changed at 29/09/2011 13:24:17
    Path: J:\Matteo\driveridentifier_setup.exe Changed at 29/09/2011 13:24:17
    Path: J:\Matteo\driveridentifier_setup.exe Changed at 29/09/2011 13:24:17
    Path: J:\Matteo\driveridentifier_setup.exe Changed at 29/09/2011 13:24:17
    Path: J:\Matteo\driveridentifier_setup.exe Changed at 29/09/2011 13:24:17
    Path: J:\Matteo\driveridentifier_setup.exe Changed at 29/09/2011 13:24:17
    Path: J:\Matteo\driveridentifier_setup.exe Changed at 29/09/2011 13:24:17
    Path: J:\Matteo\driveridentifier_setup.exe Changed at 29/09/2011 13:24:17
    Path: J:\Matteo\driveridentifier_setup.exe Changed at 29/09/2011 13:24:17
    Path: J:\Matteo\driveridentifier_setup.exe Changed at 29/09/2011 13:24:17
    Path: J:\Matteo\driveridentifier_setup.exe Changed at 29/09/2011 13:24:17
    Path: J:\Matteo\driveridentifier_setup.exe Changed at 29/09/2011 13:24:17
    Path: J:\Matteo\driveridentifier_setup.exe Changed at 29/09/2011 13:24:17
    Path: J:\Matteo\driveridentifier_setup.exe Changed at 29/09/2011 13:24:17
    Path: J:\Matteo\driveridentifier_setup.exe Changed at 29/09/2011 13:24:17
    Path: J:\Matteo\driveridentifier_setup.exe Changed at 29/09/2011 13:24:17
    Path: J:\Matteo\driveridentifier_setup.exe Changed at 29/09/2011 13:24:17
    Path: J:\Matteo\driveridentifier_setup.exe Changed at 29/09/2011 13:24:17
    Path: J:\Matteo\driveridentifier_setup.exe Changed at 29/09/2011 13:24:17
    Path: J:\Matteo\driveridentifier_setup.exe Changed at 29/09/2011 13:24:17
    Path: J:\Matteo\driveridentifier_setup.exe Changed at 29/09/2011 13:24:17
    Path: J:\Matteo\driveridentifier_setup.exe Changed at 29/09/2011 13:24:17
    Path: J:\Matteo\driveridentifier_setup.exe Changed at 29/09/2011 13:24:17
    Path: J:\Matteo\driveridentifier_setup.exe Changed at 29/09/2011 13:24:17
    Path: J:\Matteo\driveridentifier_setup.exe Changed at 29/09/2011 13:24:17
    Path: J:\Matteo\driveridentifier_setup.exe Changed at 29/09/2011 13:24:17
    Path: J:\Matteo\driveridentifier_setup.exe Changed at 29/09/2011 13:24:17
    Path: J:\Matteo\driveridentifier_setup.exe Changed at 29/09/2011 13:24:17
    Path: J:\Matteo\driveridentifier_setup.exe Changed at 29/09/2011 13:24:17
    Path: J:\Matteo\driveridentifier_setup.exe Changed at 29/09/2011 13:24:17
    Path: J:\Matteo\driveridentifier.exe Changed at 29/09/2011 13:24:17
    Path: J:\Matteo\driveridentifier.exe Changed at 29/09/2011 13:24:17
    Path: J:\Matteo\driveridentifier.exe Changed at 29/09/2011 13:24:17
    Path: J:\Matteo\driveridentifier.exe Changed at 29/09/2011 13:24:17
    Path: J:\Matteo\driveridentifier.exe Changed at 29/09/2011 13:24:18
    Path: J:\Matteo\driveridentifier.exe Changed at 29/09/2011 13:24:18
    Path: J:\Matteo\driveridentifier.exe Changed at 29/09/2011 13:24:18
    Path: J:\Matteo\driveridentifier.exe Changed at 29/09/2011 13:24:18
    Path: J:\Matteo\driveridentifier.exe Changed at 29/09/2011 13:24:18
    Path: J:\Matteo\driveridentifier.exe Changed at 29/09/2011 13:24:18
    Path: J:\Matteo\driveridentifier.exe Changed at 29/09/2011 13:24:19
    Path: J:\Matteo\driveridentifier.exe Changed at 29/09/2011 13:24:19
    Path: J:\Matteo\driveridentifier.exe Changed at 29/09/2011 13:24:19
    Path: J:\Matteo\driveridentifier.exe Changed at 29/09/2011 13:24:19
    Path: J:\Matteo\driveridentifier.exe Changed at 29/09/2011 13:24:19
    Path: J:\Matteo\driveridentifier.exe Changed at 29/09/2011 13:24:19
    Path: J:\Matteo\driveridentifier.exe Changed at 29/09/2011 13:24:20
    Path: J:\Matteo\driveridentifier.exe Changed at 29/09/2011 13:24:20
    Path: J:\Matteo\driveridentifier.exe Changed at 29/09/2011 13:24:20
    Path: J:\Matteo\driveridentifier.exe Changed at 29/09/2011 13:24:20
    Path: J:\Matteo\driveridentifier.exe Changed at 29/09/2011 13:24:20
    Path: J:\Matteo\driveridentifier.exe Changed at 29/09/2011 13:24:20
    Path: J:\Matteo\driveridentifier.exe Changed at 29/09/2011 13:24:20
    Path: J:\Matteo\driveridentifier.exe Changed at 29/09/2011 13:24:20
    Path: J:\Matteo\driveridentifier.exe Changed at 29/09/2011 13:24:20
    Path: J:\Matteo\driveridentifier.exe Changed at 29/09/2011 13:24:20
    Path: J:\Matteo\driveridentifier.exe Changed at 29/09/2011 13:24:21
    Path: J:\Matteo\driveridentifier.exe Changed at 29/09/2011 13:24:21
    Path: J:\Matteo\driveridentifier.exe Changed at 29/09/2011 13:24:21
    Path: J:\Matteo\driveridentifier.exe Changed at 29/09/2011 13:24:21
    Path: J:\Matteo\driveridentifier.exe Changed at 29/09/2011 13:24:22
    Path: J:\Matteo\driveridentifier.exe Changed at 29/09/2011 13:24:22
    Path: J:\Matteo\driveridentifier.exe Changed at 29/09/2011 13:24:22
    Path: J:\Matteo\driveridentifier.exe Changed at 29/09/2011 13:24:22
    Path: J:\Matteo\driveridentifier.exe Changed at 29/09/2011 13:24:22
    Path: J:\Matteo\driveridentifier.exe Changed at 29/09/2011 13:24:22
    Path: J:\Matteo\driveridentifier.exe Changed at 29/09/2011 13:24:22
    Path: J:\Matteo\driveridentifier.exe Changed at 29/09/2011 13:24:23
    Path: J:\Matteo\driveridentifier.exe Changed at 29/09/2011 13:24:23
    Path: J:\Matteo\driveridentifier.exe Changed at 29/09/2011 13:24:23
    Path: J:\Matteo\driveridentifier.exe Changed at 29/09/2011 13:24:23
    Path: J:\Matteo\driveridentifier.exe Changed at 29/09/2011 13:24:23
    Path: J:\Matteo\driveridentifier.exe Changed at 29/09/2011 13:24:23
    Path: J:\Matteo\driveridentifier.exe Changed at 29/09/2011 13:24:23
    Path: J:\Matteo\driveridentifier.exe Changed at 29/09/2011 13:24:23
    questo il codice:
    codice:
    using System;
    using System.Text;
    using System.IO;
    
    namespace DirectoryMonitor
    {
        class DirMonitor
        {
            public DirMonitor(string controlDir)
            {
                while (true)
                {
                    FileSystemWatcher fw = new FileSystemWatcher();
                    fw.Path = controlDir;
                    fw.IncludeSubdirectories = true;
                    fw.EnableRaisingEvents = true;
                    fw.NotifyFilter = NotifyFilters.FileName |
                        NotifyFilters.Attributes |
                        NotifyFilters.LastAccess |
                        NotifyFilters.LastWrite |
                        NotifyFilters.Security |
                        NotifyFilters.Size;
                    fw.Changed += new FileSystemEventHandler(OnFileEvent);
                    fw.Created += new FileSystemEventHandler(OnFileEvent);
                    fw.Deleted += new FileSystemEventHandler(OnFileEvent);
                }
            }
    
            private void OnFileEvent(object source, FileSystemEventArgs fsevent)
            {
                DateTime dt = new DateTime();
                dt = System.DateTime.UtcNow;
                Console.WriteLine("Path: " + fsevent.FullPath + " " + fsevent.ChangeType.ToString() + " at " + dt.ToLocalTime());
            }
        }
    }
    com'è così tanto output??

  7. #7
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    Originariamente inviato da fermat
    ho modificato mettendo un ciclo while infinito per tenerlo avviato.
    poi sono entrato nella directory e ho modificato il nome di un file.
    questo è il risultato:
    [...]
    com'è così tanto output??
    Dipende dalle notifiche che chiedi di ricevere.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

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

  8. #8
    si ho notato guardando qua http://msdn.microsoft.com/it-it/libr...yfilters.aspx.

    ho solo ancora due domandine:
    codice:
    using System;
    using System.Text;
    using System.IO;
    
    namespace DirectoryMonitor
    {
        class DirMonitor
        {
            public DirMonitor(string controlDir)
            {
                while (true)
                {
                    FileSystemWatcher fw = new FileSystemWatcher();
                    fw.Path = controlDir;
                    fw.IncludeSubdirectories = true;
                    fw.EnableRaisingEvents = true;
                    fw.NotifyFilter = 
                        NotifyFilters.LastAccess | 
                        NotifyFilters.LastWrite | 
                        NotifyFilters.FileName | 
                        NotifyFilters.DirectoryName;
    
                    //fw.Changed += new FileSystemEventHandler(OnChanged);
                    fw.Created += new FileSystemEventHandler(OnChanged);
                    fw.Deleted += new FileSystemEventHandler(OnChanged);
                    fw.Renamed += new RenamedEventHandler(OnRenamed);
                }
            }
    
            private void OnChanged(object source, FileSystemEventArgs e)
            {
                DateTime dt = new DateTime();
                dt = DateTime.UtcNow;
                Console.WriteLine("Path: " + e.FullPath + " " + e.ChangeType + " at " + dt.ToLocalTime());
            }
    
            private void OnRenamed(object source, RenamedEventArgs e)
            {
                DateTime dt = new DateTime();
                dt = DateTime.UtcNow;
                Console.WriteLine("Old path:" + e.OldFullPath + " Path: " + e.FullPath + " " + e.ChangeType + " at " + dt.ToLocalTime());
            }
        }
    }
    c'è un modo secondo te per specificare la notifica nell'output?
    cioè se è stato LastAccess, LastWrite,....
    poi mi pare di aver capito che la riga commentata:
    codice:
                    //fw.Changed += new FileSystemEventHandler(OnChanged);
                    fw.Created += new FileSystemEventHandler(OnChanged);
                    fw.Deleted += new FileSystemEventHandler(OnChanged);
                    fw.Renamed += new RenamedEventHandler(OnRenamed);
    è inutile se metto Deleted, Created e Renamed, in quanto Changed è più generico giusto?

    cmq ho notato che le operazioni dentro la cartella controllata sono più lente.

  9. #9
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    Originariamente inviato da fermat
    c'è un modo secondo te per specificare la notifica nell'output?
    cioè se è stato LastAccess, LastWrite,....
    Non credo, anche perché alcuni attributi vengono modificati in modo unitario, quindi la notifica arriva quando uno o più di essi sono cambiati.

    Per sapere di cosa si tratta, devi archiviare le informazioni e confrontarle alla notifica successiva.

    Originariamente inviato da fermat
    poi mi pare di aver capito che la riga commentata [...]
    è inutile se metto Deleted, Created e Renamed, in quanto Changed è più generico giusto?
    No, non è inutile, perché gli eventi Created, Deleted e Renamed gestiscono eventi specifici all'interno del percorso in termini di file rinominati, creati e cancellati, ma con quegli eventi non puoi ricevere un dettaglio sulla modifica di un preciso file, ad esempio, come nel caso degli attributi di cui si parlava all'inizio.

    Inoltre, come riportato nella documentazione, vi sono agenti esterni (es. antivirus) che agendo nella cartella potrebbero causare la segnalazione di eventi aggiuntivi legati al fatto che il programma specifico "tocca" il file per qualche motivo (ad esempio, per verificare l'assenza di virus al suo interno).

    Prima di affermare che lo strumento sia quello adatto alle tue esigenze, vista la gamma di problemi che riscontri, dovresti illustrare meglio qual è lo scenario che devi realizzare nel programma, cioè in breve a cosa ti serve monitorare la directory.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

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

  10. #10
    in verità penso che l'unico problema era che avevo scritto in maniera errata il programma.
    seguendo un esempio sulla documentazione nn riscontro più problemi:
    codice:
    using System;
    using System.Text;
    using System.IO;
    
    namespace DirectoryMonitor
    {
        class Program
        {
            static void Main()
            {
                Run();
            }
    
            private static void Run()
            {
                Console.WriteLine("Immetti il percorso di una directory");
                FileSystemWatcher fw = new FileSystemWatcher();
                fw.Path = Console.ReadLine();
                fw.IncludeSubdirectories = true;
                fw.NotifyFilter =
                    NotifyFilters.LastAccess |
                    NotifyFilters.LastWrite |
                    NotifyFilters.FileName |
                    NotifyFilters.DirectoryName;
                fw.Changed += new FileSystemEventHandler(OnChanged);
                fw.Created += new FileSystemEventHandler(OnChanged);
                fw.Deleted += new FileSystemEventHandler(OnChanged);
                fw.Renamed += new RenamedEventHandler(OnRenamed);
                fw.EnableRaisingEvents = true;
    
                Console.WriteLine("Digita q per uscire.");
                while (Console.Read() != 'q') ;
            }
    
            private static void OnChanged(object source, FileSystemEventArgs e)
            {
                DateTime dt = new DateTime();
                dt = DateTime.UtcNow;
                Console.WriteLine("Path: " + e.FullPath + " " + e.ChangeType + " at " + dt.ToLocalTime());
            }
    
            private static void OnRenamed(object source, RenamedEventArgs e)
            {
                DateTime dt = new DateTime();
                dt = DateTime.UtcNow;
                Console.WriteLine("Old path:" + e.OldFullPath + " Path: " + e.FullPath + " " + e.ChangeType + " at " + dt.ToLocalTime());
            }
        }
    }
    devo capire se il problema era il ciclo while o il fatto che avevo scritto male la classe DirMonitor.
    mettendo tutto nel main nn ho problemi.
    probabilmente ho scritto male la classe.

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.