1

我需要在不同时间观看多个文件,有时同时观看。

我用这个作为测试:

namespace FilewatcherTest
{
  public partial class Form1 : Form
  {
    private System.IO.FileSystemWatcher FSWatcherTest;

    public Form1()
    {
      InitializeComponent();

      FSWatcherTest = new FileSystemWatcher();
      EventHandling();
      FSWatcherTest.Path = @"d:\tmp";
      FSWatcherTest.Filter = "file.txt";
      // Begin watching.
      FSWatcherTest.EnableRaisingEvents = true;
    }

    protected void EventHandling()
    {
      FSWatcherTest.Changed += FSWatcherTest_Changed;
      FSWatcherTest.Deleted += FSWatcherTest_Deleted;
      FSWatcherTest.Renamed += FSWatcherTest_Renamed;
      FSWatcherTest.Created += FSWatcherTest_Created;
    }

    private void FSWatcherTest_Changed(object sender, System.IO.FileSystemEventArgs e)
    {
      WriteToLog("File Changed");
    }

    private void FSWatcherTest_Created(object sender, System.IO.FileSystemEventArgs e)
    {
      WriteToLog("File Created");
    }

    private void FSWatcherTest_Deleted(object sender, System.IO.FileSystemEventArgs e)
    {
      WriteToLog("File Deleted");          
    }

    private void FSWatcherTest_Renamed(object sender, System.IO.RenamedEventArgs e)
    {
      WriteToLog("File Renamed");
    }

    private void WriteToLog(string message)
    {
      using (var sw = new StreamWriter(@"d:\tmp\service.log", true))
      {
        sw.WriteLine(string.Format("{0} {1}", DateTime.Now,message));
      }

    }

  }
}

当然,一旦我有了一些东西,我就会改变硬编码的路径,因为这将进入我创建的服务。

我的问题是,我可以使用相同的文件观察器还是应该为每个文件使用一个唯一的?

如果我使用相同的文件,我怎么知道哪个文件引发了事件?

谢谢!!

编辑抱歉,我以前没有使用过 filesystemwatcher,也不知道这很重要,但是文件将位于不同的目录中,并且文件类型不同。

4

1 回答 1

2

我可以使用相同的文件观察器还是应该为每个文件使用一个唯一的?

在您的情况下,我认为没有理由为您正在观看的每个文件创建一个新的 FileSystemWatcher 实例。是的,您可以使用相同的。您可以使用“*.txt”之类的过滤器或任何您需要观看一组文件的过滤器......

如果我使用相同的文件,我怎么知道哪个文件引发了事件?

FileSystemEventArgs一个Name属性,它返回触发事件的文件的名称。例如:

private void FSWatcherTest_Created(object sender, System.IO.FileSystemEventArgs e)
{
   string fileName = e.Name; 
   WriteToLog("File Created: " + fileName);
}
于 2013-02-17T16:41:21.400 回答