Zoeken…


Syntaxis

  • openbare FileSystemWatcher ()
  • openbare FileSystemWatcher (stringpad)
  • openbare FileSystemWatcher (stringpad, stringfilter)

parameters

pad filter
De map die moet worden bewaakt, in standaard of Universal Naming Convention (UNC) notatie. Het type bestanden om te bekijken. "* .Txt" let bijvoorbeeld op wijzigingen in alle tekstbestanden.

Basic FileWatcher

In het volgende voorbeeld wordt een FileSystemWatcher om de map te bekijken die tijdens runtime is opgegeven. De component is ingesteld om te letten op wijzigingen in LastWrite en LastAccess- tijd, het maken, verwijderen of hernoemen van tekstbestanden in de map. Als een bestand wordt gewijzigd, gemaakt of verwijderd, wordt het pad naar het bestand naar de console afgedrukt. Wanneer de naam van een bestand wordt gewijzigd, worden de oude en nieuwe paden naar de console afgedrukt.

Gebruik de naamruimten System.Diagnostics en System.IO voor dit voorbeeld.

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

Een veel voorkomende fout die veel mensen maken die beginnen met FileSystemWatcher, houdt geen rekening met het feit dat de FileWatcher-gebeurtenis wordt gestart zodra het bestand is gemaakt. Het kan echter enige tijd duren voordat het bestand is voltooid.

Voorbeeld :

Neem bijvoorbeeld een bestandsgrootte van 1 GB. Het bestand kan worden gemaakt door een ander programma (Explorer.exe kopieert het ergens), maar het duurt enkele minuten om dat proces te voltooien. De gebeurtenis wordt zo groot gemaakt dat u tijd maakt en u moet wachten tot het bestand klaar is om te worden gekopieerd.

Dit is een methode om te controleren of het bestand klaar is.

 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;
    }
}


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow