2016-10-20 8 views
0

私はいくつかのファイルをfolder.Firstに書きましたが、2つのファイルが書き込まれ、10-20分後に次の2つのファイルがあります。fileSystemWatcherを待つように教えてください

私の質問は:

は、すべての4つのファイルは、私のコードを実行する前に、フォルダ内にあるまで待機するファイルシステムウォッチャーを 伝えるためにすべての可能な方法はありますか?

+2

クラスを作成し、あなたがなる最後のファイルの名前を知っている場合、火災は、すべての4つのエントリが – BugFinder

+0

があるというイベントを作成Filterプロパティを使用して、このファイルに関連するイベントのみを待機させることができます。 –

答えて

1

@BugFinderの提案によると、私は似たようなものを作りましたが、テストはしませんでした。それが有用であるホープ:

using System; 
using System.Collections.Generic; 
using System.IO; 
using System.Linq; 
using System.Text; 

namespace CustomFileWatcher 
{ 
    public class CustomFileWatcher : IDisposable 
    { 
     private FileSystemWatcher fileWatcher; 
     private IList<string> fileList; 
     private IList<string> createdFiles; 

     public event EventHandler FilesCreated; 
     protected void OnFilesCreated(EventArgs e) 
     { 
      var handler = FilesCreated; 
      if (handler != null) 
       handler(this, e); 
     } 

     public CustomFileWatcher(IList<string> waitForTheseFiles, string path) 
     { 
      fileList = waitForTheseFiles; 
      createdFiles = new List<string>(); 
      fileWatcher = new FileSystemWatcher(path); 
      fileWatcher.Created += fileWatcher_Created; 
     } 

     void fileWatcher_Created(object sender, FileSystemEventArgs e) 
     { 
      foreach (var item in fileList) 
      { 
       if (fileList.Contains(e.Name)) 
       { 
        if (!createdFiles.Contains(e.Name)) 
        { 
         createdFiles.Add(e.Name); 
        } 
       } 
      } 

      if (createdFiles.SequenceEqual(fileList)) 
       OnFilesCreated(new EventArgs()); 
     } 

     public CustomFileWatcher(IList<string> waitForTheseFiles, string path, string filter) 
     { 
      fileList = waitForTheseFiles; 
      createdFiles = new List<string>(); 
      fileWatcher = new FileSystemWatcher(path, filter); 
      fileWatcher.Created += fileWatcher_Created; 
     } 

     public void Dispose() 
     { 
      if (fileWatcher != null) 
       fileWatcher.Dispose(); 
     } 
    } 
} 

使用

class Program 
    { 
     static void Main(string[] args) 
     { 
      IList<string> waitForAllTheseFilesToBeCopied = new List<string>(); 
      waitForAllTheseFilesToBeCopied.Add("File1.txt"); 
      waitForAllTheseFilesToBeCopied.Add("File2.txt"); 
      waitForAllTheseFilesToBeCopied.Add("File3.txt"); 

      string watchPath = @"C:\OutputFolder\"; 

      CustomFileWatcher customWatcher = new CustomFileWatcher(waitForAllTheseFilesToBeCopied, watchPath); 

      customWatcher.FilesCreated += customWatcher_FilesCreated; 
     } 

     static void customWatcher_FilesCreated(object sender, EventArgs e) 
     { 
      // All files created. 
     } 
    } 
関連する問題