Classe System.IO.FileSystemWatcher
Questo articolo fornisce osservazioni supplementari alla documentazione di riferimento per questa API.
Usare FileSystemWatcher per controllare le modifiche in una directory specificata. È possibile controllare le modifiche apportate ai file e alle sottodirectory della directory specificata. È possibile creare un componente per controllare i file in un computer locale, in un'unità di rete o in un computer remoto.
Per controllare le modifiche in tutti i file, impostare la Filter proprietà su una stringa vuota ("") o usare caratteri jolly ("*.*"). Per controllare un file specifico, impostare la Filter proprietà sul nome del file. Ad esempio, per controllare le modifiche nel file MyDoc.txt, impostare la Filter proprietà su "MyDoc.txt". È anche possibile controllare le modifiche in un determinato tipo di file. Ad esempio, per controllare le modifiche apportate ai file di testo, impostare la Filter proprietà su "*.txt".
Esistono diversi tipi di modifiche che è possibile controllare in una directory o in un file. Ad esempio, è possibile controllare le modifiche in Attributes
, la data e l'ora LastWrite
o i Size
file o le directory. Questa operazione viene eseguita impostando la NotifyFilter proprietà su uno dei NotifyFilters valori . Per altre informazioni sul tipo di modifiche che è possibile controllare, vedere NotifyFilters.
È possibile controllare la ridenominazione, l'eliminazione o la creazione di file o directory. Ad esempio, per controllare la ridenominazione dei file di testo, impostare la Filter proprietà su "*.txt" e chiamare il WaitForChanged metodo con un Renamed specificato per il relativo parametro.
Il sistema operativo Windows notifica al componente le modifiche apportate ai file in un buffer creato da FileSystemWatcher. Se sono presenti molte modifiche in breve tempo, il buffer può eseguire l'overflow. In questo modo il componente perde la traccia delle modifiche nella directory e fornisce solo una notifica coperta. L'aumento delle dimensioni del buffer con la InternalBufferSize proprietà è costoso, perché proviene da memoria non di paging che non può essere scambiata su disco, quindi mantenere il buffer come sufficientemente piccolo ma sufficientemente grande da non perdere alcun evento di modifica del file. Per evitare un overflow del buffer, usare le NotifyFilter proprietà e IncludeSubdirectories in modo da filtrare le notifiche di modifica indesiderate.
Per un elenco dei valori iniziali delle proprietà per un'istanza di FileSystemWatcher, vedere il FileSystemWatcher costruttore .
Considerazioni sull'uso della FileSystemWatcher classe :
- I file nascosti non vengono ignorati.
- In alcuni sistemi segnala FileSystemWatcher le modifiche apportate ai file usando il formato breve del nome file 8.3. Ad esempio, una modifica a "LongFileName.LongExtension" potrebbe essere segnalata come "LongFil~. Lon".
- Questa classe contiene una richiesta di collegamento e una richiesta di ereditarietà a livello di classe che si applica a tutti i membri. Viene SecurityException generata un'eccezione quando il chiamante immediato o la classe derivata non dispone dell'autorizzazione di attendibilità totale. Per informazioni dettagliate sulle richieste di sicurezza, vedere Richieste di collegamento.
- La dimensione massima che è possibile impostare per la proprietà per il InternalBufferSize monitoraggio di una directory in rete è di 64 KB.
Copiare e spostare cartelle
Il sistema operativo e FileSystemWatcher l'oggetto interpretano un'azione taglia e incolla o un'azione di spostamento come azione di ridenominazione per una cartella e il relativo contenuto. Se si taglia e incolla una cartella con i file in una cartella che viene osservata, l'oggetto FileSystemWatcher segnala solo la cartella come nuova, ma non il relativo contenuto perché sono essenzialmente rinominati solo.
Per ricevere una notifica che indica che il contenuto delle cartelle è stato spostato o copiato in una cartella watched, specificare OnChanged i metodi del gestore eventi e OnRenamed come suggerito nella tabella seguente.
Gestore evento | Eventi gestiti | Modalità di esecuzione |
---|---|---|
OnChanged | Changed, Created, Deleted | Segnalare le modifiche apportate agli attributi dei file, ai file creati e ai file eliminati. |
OnRenamed | Renamed | Elencare i percorsi precedenti e nuovi di file e cartelle rinominati, espandendo in modo ricorsivo, se necessario. |
Eventi e dimensioni del buffer
Si noti che diversi fattori possono influire sugli eventi di modifica del file system generati, come descritto di seguito:
- Le operazioni comuni del file system possono generare più eventi. Ad esempio, quando un file viene spostato da una directory a un'altra, potrebbero essere generati diversi OnChanged e alcuni OnCreated eventi e OnDeleted . Lo spostamento di un file è un'operazione complessa costituita da più operazioni semplici, generando quindi più eventi. Analogamente, alcune applicazioni (ad esempio, il software antivirus) potrebbero causare eventi aggiuntivi del file system rilevati da FileSystemWatcher.
- Può FileSystemWatcher controllare i dischi purché non vengano spostati o rimossi. Non FileSystemWatcher genera eventi per CD e DVD, perché i timestamp e le proprietà non possono essere modificati. Per il corretto funzionamento del componente, è necessario che nei computer remoti sia installata una delle piattaforme necessarie.
Si noti che un FileSystemWatcher evento potrebbe non essere presente quando viene superata la dimensione del buffer. Per evitare eventi mancanti, seguire queste linee guida:
- Aumentare le dimensioni del buffer impostando la InternalBufferSize proprietà .
- Evitare di guardare i file con nomi di file lunghi, perché un nome di file lungo contribuisce a riempire il buffer. Prendere in considerazione la ridenominazione di questi file usando nomi più brevi.
- Mantenere il codice di gestione degli eventi il più breve possibile.