2016-06-22 7 views
4

更新されるたびに削除され書き換えられるログファイルを継続的に監視しようとしています。C#再作成中のファイルを継続的に監視しています

私の現在のアプローチは、FileSystemWatcherを使用することでした。これは、ファイルを変更するときにはうまくいきますが、ファイルを削除して同じ名前の新しいファイルを作成すると、ファイルの追跡が中止されます。

私の現在のアプローチ:

作成および削除の操作はFileSystemWatcherの OnChangedイベントをトリガしませんので、これは
namespace LogReader 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Watch(); 

      while (true) 
      { 

      } 
     } 

     public static void Watch() 
     { 
      var watch = new FileSystemWatcher(); 
      watch.Path = @"C:\TEMP\test"; 
      watch.Filter = "test.txt"; 
      watch.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite; 
      watch.Changed += new FileSystemEventHandler(OnChanged); 
      watch.EnableRaisingEvents = true; 
     } 

     private static void OnChanged(object source, FileSystemEventArgs e) 
     { 
      if (e.FullPath == @"C:\TEMP\test\test.txt") 
      { 
       Console.Clear(); 
       Stream stream = File.Open(@"C:\TEMP\test\test.txt", FileMode.Open, FileAccess.Read, FileShare.ReadWrite); 
       StreamReader streamReader = new StreamReader(stream); 
       var lines = streamReader.ReadToEnd(); 
       Console.Out.WriteLine(lines); 

       streamReader.Close(); 
       stream.Close(); 
      } 
     } 

    } 
} 
+4

作成したり削除したりすることもできます。 – BugFinder

答えて

4

。だから、それは次のようになり、これらのイベントを登録し、同じイベントハンドラOnChangedを割り当てる必要があります:

watch.Created += new FileSystemEventHandler(OnChanged); 
watch.Deleted += new FileSystemEventHandler(OnChanged); 

あなたは、FileSystemWatcherの詳細についてはThisを通過することができます。

+0

ええ、私も 'NotifyFilters.CreationTime'フィルタを追加しなければなりませんでした。ありがとう。 – RusinaRange

+0

作成イベントのために[It](https://msdn.microsoft.com/en-us/library/system.io.notifyfilters(v = vs.110).aspx)は必要ありません –

+0

ファイルの作成がトリガーされませんでしたLastAccessまたはLastWriteのようになりました。 – RusinaRange

1

ファイルの作成ではなくファイルの変更のみを監視していました。時計の機能をこれに変更すると固定されました。

public static void Watch() 
    { 
     var watch = new FileSystemWatcher(); 
     watch.Path = @"C:\TEMP\test"; 
     watch.Filter = "test.txt"; 
     watch.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite | NotifyFilters.CreationTime; //more options 
     watch.Created += new FileSystemEventHandler(OnChanged); 
     watch.Changed += new FileSystemEventHandler(OnChanged); 
     watch.EnableRaisingEvents = true; 
    } 
関連する問題