2016-06-29 8 views
0

私は私のコードは以下の通りです、ファイル作成のためのフォルダに時計を維持するために、ファイルウォッチャーを使用している: -Visual Studio ASP .NETでファイルウォッチャー突然の行動

_watcher = new FileWatcher(); 
      _watcher.Path = ConfigurationManager.AppSettings["LandingArea"];    
      _watcher.NotifyFilter = 
       NotifyFilters.CreationTime | 
       NotifyFilters.LastWrite | 
       NotifyFilters.FileName | 
       NotifyFilters.DirectoryName | 
       NotifyFilters.LastAccess; 
      _watcher.Filter = "*.xml"; 
      _watcher.EnableRaisingEvents = true; 
      _watcher.Created += _watcher_Created; 

------------ -----------イベントが下にあります----------------------

private void _watcher_Created(object sender, System.IO.FileSystemEventArgs e) 
     { 
      DataAccessLayer.InsertFileToDatabase(); 
     } 

私の質問は3です同時に3つのファイルのうちの1つだけがデータベースに挿入され、3つのファイルが作成されているにもかかわらず、ファイルウォッチャーが1ファイルだけのイベントを発生させたことを意味します。

ここにお手伝いがあります。

答えて

0

InsertFileToDatabaseを呼び出すときにFileSystemEventArgsを無視しています。私は、このメソッドの中にロジックのバグがあるかもしれないと思う。

イベントargsには、新しいファイルのフルパスと、どのような変更が発生したかの情報が含まれています。カスタムロジックではなく、そのオブジェクトに頼ることをお勧めします。

これは、3つのファイルが作成されているにもかかわらず、ファイルウォッチャーが1つのファイルに対してのみイベントを発生させたことを意味します。

これは間接的な結論であり、間違っている可能性があります。イベントハンドラを監査し、フルパスを追跡し、イベント引数からタイプを変更することをお勧めします。これが解決策につながります。

+0

私はFileSystemEventArgsを無視していない、私はInsertFiletoDatabaseメソッド内でそれを使用しています、ちょうど実際のコードではないスニペットをここでは答えている限り、答えをありがとう: - – Rohit

+0

イベントargsイベントハンドラへの呼び出しで、何回何回データが発生するかを確認するだけです。 –

+0

はい、私はそれを行っており、結論はイベントが1回のみ発射され、さらに3つのファイルすべての作成時間がミリ秒まで全く同じであることを指定したいと思います。 – Rohit

関連する問題