C# Language
FileSystemWatcher
Ricerca…
Sintassi
- public FileSystemWatcher ()
- public FileSystemWatcher (percorso stringa)
- public FileSystemWatcher (percorso stringa, filtro stringa)
Parametri
sentiero | filtro |
---|---|
La directory da monitorare, nella notazione standard o Universal Naming Convention (UNC). | Il tipo di file da guardare. Ad esempio, "* .txt" controlla le modifiche a tutti i file di testo. |
FileWatcher di base
L'esempio seguente crea un FileSystemWatcher
per guardare la directory specificata in fase di esecuzione. Il componente è impostato per controllare le modifiche in LastWrite e LastAccess time, la creazione, la cancellazione o la ridenominazione dei file di testo nella directory. Se un file viene modificato, creato o eliminato, il percorso del file viene stampato sulla console. Quando un file viene rinominato, i percorsi vecchi e nuovi vengono stampati sulla console.
Utilizzare gli spazi dei nomi System.Diagnostics e System.IO per questo esempio.
FileSystemWatcher watcher;
private void watch()
{
// Create a new FileSystemWatcher and set its properties.
watcher = new FileSystemWatcher();
watcher.Path = path;
/* Watch for changes in LastAccess and LastWrite times, and
the renaming of files or directories. */
watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite
| NotifyFilters.FileName | NotifyFilters.DirectoryName;
// Only watch text files.
watcher.Filter = "*.txt*";
// Add event handler.
watcher.Changed += new FileSystemEventHandler(OnChanged);
// Begin watching.
watcher.EnableRaisingEvents = true;
}
// Define the event handler.
private void OnChanged(object source, FileSystemEventArgs e)
{
//Copies file to another directory or another action.
Console.WriteLine("File: " + e.FullPath + " " + e.ChangeType);
}
IsFileReady
Un errore comune che molte persone iniziano con FileSystemWatcher non sta prendendo in considerazione che l'evento FileWatcher viene generato non appena viene creato il file. Tuttavia, potrebbe essere necessario del tempo per il completamento del file.
Esempio :
Ad esempio, prendi una dimensione del file di 1 GB. Il file apr ask creato da un altro programma (Explorer.exe lo copia da qualche parte) ma ci vorranno alcuni minuti per terminare quel processo. L'evento aumenta il tempo di creazione e devi aspettare che il file sia pronto per essere copiato.
Questo è un metodo per verificare se il file è pronto.
public static bool IsFileReady(String sFilename)
{
// If the file can be opened for exclusive access it means that the file
// is no longer locked by another process.
try
{
using (FileStream inputStream = File.Open(sFilename, FileMode.Open, FileAccess.Read, FileShare.None))
{
if (inputStream.Length > 0)
{
return true;
}
else
{
return false;
}
}
}
catch (Exception)
{
return false;
}
}