当FileSystemWatcher调用一个事件处理器时,它包含两个自变量——一个叫做“sender”的对象和一个叫做“e”的FileSystemEventArgs对象。我们感兴趣的自变量为FileSystemEventArgs自变量。这个对象中包含有提交事件的原因。以下是FileSystemEventArgs对象的一些属性:
属性:
1.Name——这个属性中使事件被提交的文件的名称。其中并不包含文件的路径——只包含使用事件被提交的文件或目录名称。
2.ChangeType——这是一个WatcherChangeTypes,它指出要提交哪个类型的事件。其有效值包括:
◆Changed
◆Created
◆Deleted
◆Renamed
3.FullPath——这个属性中包含使事件被提交的文件的完整路径,包括文件名和目录名。
代码实例
下列代码列出了C# FileSystemWatcher对象的一个简单应用实例。在这个例子中,我们监控“C:Temp”目录中是否建立了*.TXT文件。这可能是FileSystemWatcher的最简单用法。
- publicvoid CreateWatcher(){
- //Create a new FileSystemWatcher.
- FileSystemWatcher watcher = newFileSystemWatcher();
- //Set the filter to only catch TXT files.
- watcher.Filter = "*.txt";
- //Subscribe to the Created event.
- watcher.Created += new
- FileSystemEventHandler(watcher_FileCreated);
- //Set the path to C:Temp
- watcher.Path = @"C:Temp";
- //Enable the FileSystemWatcher events.
- watcher.EnableRaisingEvents = true;
- }
- void watcher_FileCreated(object sender, FileSystemEventArgs e){
- //A new .TXT file has been created in C:Temp
- Console.WriteLine("A new *.txt file has been created!");
- }
应用
最初,FileSystemWatcher的用途可能并不明显。当然,如果一个文件或目录发生改变,它会向我们发出警报,但在哪些情况下我们需要这类信息呢?
如果一个系统允许客户端上传文件进行处理,这时可能就要用到C# FileSystemWatcher对象。尽管很明显我们已经进入Web服务和SOA时代,但许多系统仍然要将平面文件插入到某些位置,不管是FTP服务器或网络共享文件夹中。我已经将C# FileSystemWatcher对象应用到这种类型的系统中,虽然并不是完全没有出错,但它在“调查”目录变化方面确实有一定的优势。
如果你想让两个文件保持同步,这时也可以用到C# FileSystemWatcher对象。你可以用FileSystemWatcher同时监控这两个文件的位置,如果其中一个出现更新,就提交一个Changed事件;然后你就可以将这些改变复制到其它系统/文件中。
如果你的系统有任何功能需要进行文件或目录监控,你必须仔细了解那个组件,看是否可以使用C# FileSystemWatcher对象。在我的应用过程中,这个对象至少为送交给系统的每个文件节省了10秒钟的时间。
【编辑推荐】