サーチ…


構文

  • public FileSystemWatcher()
  • パブリックFileSystemWatcher(文字列パス)
  • パブリックFileSystemWatcher(文字列パス、文字列フィルタ)

パラメーター

パスフィルタ
標準またはUNC(Universal Naming Convention)表記で監視するディレクトリ。 見るファイルの種類。たとえば、「* .txt」はすべてのテキストファイルの変更を監視します。

基本FileWatcher

次の例では、実行時に指定されたディレクトリを監視するFileSystemWatcherを作成しFileSystemWatcher 。このコンポーネントは、 LastWriteおよびLastAccess時間の変更、ディレクトリ内のテキストファイルの作成、削除、または名前変更を監視するように設定されています。ファイルが変更、作成、または削除されると、ファイルへのパスがコンソールに出力されます。ファイルの名前が変更されると、古いパスと新しいパスがコンソールに出力されます。

この例では、System.DiagnosticsとSystem.IOの名前空間を使用します。

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

よくある間違いFileSystemWatcherで始まる多くの人は、ファイルが作成されるとすぐにFileWatcherイベントが発生することを考慮していません。ただし、ファイルが終了するまでに時間がかかることがあります。

たとえば、1 GBのファイルサイズをとります。ファイルaprは別のプログラム(Explorer.exeはどこかからコピーしています)によって作成されますが、そのプロセスを完了するのに数分かかります。このイベントは作成時間が長くなり、ファイルのコピー準備が整うのを待つ必要があります。

これは、ファイルが準備完了であるかどうかをチェックする方法です。

 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
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow