Procedura: configurare istanze del componente FileSystemWatcher
Aggiornamento: novembre 2007
Esistono diverse proprietà che è possibile impostare per le istanze del componente FileSystemWatcher al fine di determinarne il comportamento. Queste proprietà determinano quali directory e sottodirectory verranno monitorate dall'istanza del componente e da quali occorrenze all'interno di tali directory saranno generati gli eventi.
Specifica delle directory da monitorare
Per determinare le directory che devono essere sottoposte al controllo del componente FileSystemWatcher, vengono utilizzate due proprietà: Path e IncludeSubdirectories.
Per indicare il percorso completo della directory principale da controllare
Impostare la proprietà Path su un'istanza esistente del componente, come illustrato nel seguente codice:
Dim MyWatcher As New System.IO.FileSystemWatcher() MyWatcher.Path = "c:\"
System.IO.FileSystemWatcher MyWatcher = new System.IO.FileSystemWatcher(); MyWatcher.Path = "c:\\";
Il percorso della directory può essere indicato con la notazione standard (c:\directory) o in formato UNC (\\server\directory).
La proprietà IncludeSubdirectories consente di indicare se le sottodirectory all'interno della directory principale devono essere monitorate. Se la proprietà è impostata su true, viene eseguito nelle sottodirectory il controllo delle stesse modifiche esaminate all'interno della directory principale.
Specifica delle modifiche da controllare
Oltre a specificare le directory e le sottodirectory da controllare, è possibile indicare i file e i tipi di modifiche da esaminare. In parte, è possibile determinare le modifiche da controllare definendo dei gestori solo per gli eventi a cui si è interessati. Se ad esempio si desidera ricevere notifiche solo in seguito alla creazione di file, è necessario gestire solo l'evento Created. È tuttavia possibile impostare una serie di proprietà che limitano ulteriormente le attività del componente.
È possibile utilizzare la proprietà Filter per indicare un file particolare o un criterio di ricerca con caratteri jolly che limita il controllo a determinati file o directory all'interno della directory principale. Se ad esempio si desidera controllare la creazione di file di testo all'interno della directory principale, è possibile impostare la proprietà Filter su "*.txt" e creare un gestore per l'evento Created. È possibile impostare il filtro su qualsiasi valore, incluse tutte le estensioni file valide. Il valore predefinito "*.*" restituisce tutto, mentre il valore "" (una stringa vuota) restituisce anche tutti i file o le directory. È tuttavia possibile impostare solo una stringa filtro alla volta. Se necessario, è possibile modificare il filtro dopo che la proprietà FileSystemWatcher ha iniziato a ricevere gli eventi.
Nota: |
---|
Il componente FileSystemWatcher è stato progettato per il controllo delle modifiche all'interno di una directory, non delle modifiche agli attributi della directory. Se, ad esempio, si controlla una directory denominata c:\MyProjects, mediante il componente sarà possibile monitorare le modifiche effettuate all'interno della directory, non le modifiche apportate alla directory stessa. |
È anche possibile utilizzare la proprietà NotifyFilter per limitare ulteriormente le modifiche per le quali viene fornita una risposta. È possibile impostare la proprietà NotifyFilter per il controllo delle modifiche ai nomi delle directory e/o ai nomi dei file. Inoltre, la proprietà NotifyFilter contiene una serie di valori che limitano l'evento Changed. L'evento Changed è in grado di generare un numero elevato di eventi, in quanto genera un evento ogni volta che viene apportata una modifica al file in questione. Alcune operazioni standard, quali la copia e lo spostamento di file, causano la generazione di diversi eventi di modifica dei file, in quanto implicano la modifica di diversi attributi, ad esempio quelli relativi alla dimensione, all'ora dell'ultima scrittura e all'ora dell'ultimo accesso.
La proprietà NotifyFilter limita il numero di modifiche a file o directory per le quali saranno generati eventi nell'istanza del componente. È possibile impostare il componente in modo da generare eventi solo quando si modificano il nome di un file o di una directory, gli attributi di un elemento all'interno della directory principale, la dimensione di un file, l'ora dell'ultima scrittura o dell'ultimo accesso al file o i diritti di sicurezza per l'accesso a un file o una directory. Tutti questi valori fanno parte dell'enumerazione NotifyFilters. È possibile impostare più modifiche da controllare utilizzando un operatore BitOr (per Visual Basic) o | (per Visual C#), come mostrato nell'esempio riportato di seguito.
Nota: |
---|
È necessario impostare la proprietà EnableRaisingEvents su true per avviare il monitoraggio delle modifiche nel componente FileSystemWatcher. |
Per configurare un'istanza del componente FileSystemWatcher
Creare un'istanza del componente FileSystemWatcher. Per ulteriori informazioni, vedere Procedura: creare istanze del componente FileSystemWatcher.
Impostare la proprietà Path sul percorso completo della directory principale che si desidera controllare.
Suggerimento: È possibile specificare un percorso di file standard o un percorso UNC.
Impostare le proprietà facoltative per l'istanza.
Scenario
Proprietà
Valore
Per controllare le modifiche al nome di un file o di una sottodirectory all'interno della directory principale
Un'espressione di filtro con caratteri jolly che consente di limitare il monitoraggio delle attività dell'istanza
Per controllare le modifiche all'interno delle sottodirectory contenute nella directory principale
true oppure false
Per controllare solo modifiche specifiche a un file o a una sottodirectory durante la gestione dell'evento Changed, Renamed, Deleted o Created
Uno dei valori disponibili nell'enumerazione NotifyFilters
Attivare l'istanza del componente impostando la proprietà EnableRaisingEvents su true.
Si supponga ad esempio di voler creare un'istanza di FileSystemWatcher per il controllo della creazione di nuovi file in formato TXT in una directory di destinazione denominata "reports". Si supponga, inoltre, che si desideri monitorare le modifiche apportate ai report esistenti che vengono eseguiti nuovamente in modo dinamico in seguito alla modifica dei dati. Il componente viene impostato come riportato di seguito.
' This needs to be declared in a place where it will not go out of scope. ' For example, it would be a class variable in a form class. Dim MyWatcher As New System.IO.FileSystemWatcher() ' This code would go in one of the initialization methods of the class. MyWatcher.Path = "c:\" ' Watch only for changes to *.txt files. MyWatcher.Filter = "*.txt" MyWatcher.IncludeSubdirectories = False ' Filter for Last Write changes. MyWatcher.NotifyFilter = System.IO.NotifyFilters.LastWrite ' Example of watching more than one type of change. MyWatcher.NotifyFilter = _ System.IO.NotifyFilters.LastAccess Or System.IO.NotifyFilters.Size ' Enable the component to begin watching for changes. MyWatcher.EnableRaisingEvents = True
// This needs to be declared in a place where it will not go out of scope. // For example, it would be a class variable in a form class. System.IO.FileSystemWatcher MyWatcher = new System.IO.FileSystemWatcher(); // This code would go in one of the initialization methods of the class. MyWatcher.Path = "c:\\"; // Watch only for changes to *.txt files. MyWatcher.Filter = "*.txt"; MyWatcher.IncludeSubdirectories = false; // Enable the component to begin watching for changes. MyWatcher.EnableRaisingEvents = true; // Filter for Last Write changes. MyWatcher.NotifyFilter = System.IO.NotifyFilters.LastWrite; // Example of watching more than one type of change. MyWatcher.NotifyFilter = System.IO.NotifyFilters.LastWrite | System.IO.NotifyFilters.Size;
Vedere anche
Attività
Procedura: creare istanze del componente FileSystemWatcher