2009-08-20 14 views
0

私はFileSystemWatcherを使用して、新しいファイルがネットワークディレクトリに作成されたことを通知しています。テキストファイル(約5KBサイズ)を処理し、新しいファイルがディレクトリに作成されると直ちに削除します。 FileSystemWatcher Windowsサービスが何らかの理由で停止した場合、未処理のファイルがバックアップされて実行された後にそのファイルを検索する必要があります。ディレクトリから古いファイルを処理しているときに新しいファイルが来たらどうすればいいですか?どのような例をお願いしますか?FileSystemWatcherと未処理のファイル

ありがとう、

私はシンプルなフォームで持っているコード例です。

public partial class Form1 : Form 
{ 
    private System.IO.FileSystemWatcher watcher; 
    string tempDirectory = @"C:\test\"; 
    public Form1() 
    { 
     InitializeComponent(); 
     CreateWatcher(); 
     GetUnprocessedFiles(); 
    } 
private void CreateWatcher() 
{ 
    //Create a new FileSystemWatcher. 
    watcher = new FileSystemWatcher(); 
    watcher.Filter = "*.txt"; 
    watcher.NotifyFilter = NotifyFilters.FileName; 
     //Subscribe to the Created event. 
    watcher.Created += new FileSystemEventHandler(watcher_FileCreated); 
    watcher.Path = @"C:\test\"; 
    watcher.EnableRaisingEvents = true; 
} 

void watcher_FileCreated(object sender, FileSystemEventArgs e) 
{ 
    //Parse text file. 
     FileInfo objFileInfo = new FileInfo(e.FullPath); 
     if (!objFileInfo.Exists) return; 
     ParseMessage(e.FullPath); 
} 


    void ParseMessage(string filePath) 
    { 
     // Parse text file here 
    } 

    void GetUnprocessedFiles() 
    { 
     // Put all txt files into array. 
    string[] array1 = Directory.GetFiles(@"C:\test\"); 
    foreach (string name in array1) 
    { 
     string path = string.Format("{0}{1}", tempDirectory, name) 
     ParseMessage(path); 
    } 
    } 

}

答えて

0

プロセスを開始するには、次の手順を実行した場合:

  • 最初に(すでに今のように最後はそれらを削除)
  • フォルダ
  • プロセスのすべてのファイルの内容を取得
  • フォルダ内にファイルがなくなるまで繰り返します(新しいファイルがフォルダに格納されている可能性があるため、ここでもう一度確認してください)。
  • はウォッチャーを開始
  • 我々は常に最初のディレクトリに存在するすべてのファイルを処理するFileSystemWatcherを使用して当社のサービスのいずれについても
+0

返信いただきありがとうございます。私はそれについて考えました。 –

+0

これはありえませんが、これは良い解決策ではありません。ファイルの最後のチェックとウォッチャーの初期化の間にファイルを作成することができます。 – johnw182

0

、前ウォッチャーを開始します。ウォッチャーが起動された後、ウォッチャーを起動せずにディレクトリに表示されるファイルを処理するために(かなり長い間隔で)タイマーを起動します(時々発生します)。それは通常、すべての可能性をカバーします。