C#学习笔记(二十二):使用文件高级
2006-04-05 11:35 努力学习的小熊 阅读(1293) 评论(0) 编辑 收藏 举报监控文件结构:
这里使用的FileSystemWatcher类,可以对文件系统事件做出响应。
使用这个类前必须设置的属性
属性 |
说明 |
Path |
它设置要被监控的文件或目录位置 |
NotifyFilter |
这是NotifyFilters枚举值的组合,NotifyFilters枚举值规定在被监控的文件内要监控哪些内容。这些表示要被监控的文件或文件夹的属性。如果任何规定的属性发生了变化,则就引发事件。可能的枚举值是:Attributes,CreationTime,DirectoryName,FileName,LastAccess,LastWrite,Security和Size。注意可以通过二进制OR操作符联合使用这些枚举值 |
Filter |
在其上监控文件的过滤器,例如:*.txt |
设置后必须为它4种事件编写事件处理程序:Changed,Created,Deleted和Renamed。
监控文件的例子UseFileAdvanced见下载。
异步访问文件:
在基础中介绍的例子对文件的访问都是同步的。这表示直到完成了读或写操作,才能继续进行应用程序流。对于大多数应用程序都适用同步文件访问。但是有时需要写入大量数据,而又不希望在完成写入工作之前让应用程序处于等待状态(假死)。或者需要从网络的某个位置的文件上读取数据,但是网络连接速度却非常慢;在加载数据期间,应用程序可以继续处理其他工作或取消当前的工作,而不必等待进程结束再处理。
FileStream类给出了几种允许对文件进行异步访问的方法。BeginRead()方法,此方法接受与基本Read方法的参数相类似的参数和其他一些附加参数来启动一个异步进程:
IAsyncResult BeginRead(byte[] array, int offset, int numBytes, AsyncCallback userCallBack, object stateObject);
前3个参数完全等同于Read方法的参数。UserCallBack参数是定制的方法,当读取操作结束时,.NET Framework就会将这种定制方法调用回应用程序中。此方法不是必须的,所以可以给它传递null。最后一个参数是用户提供的状态对象,与回调方法一起使用,以便分隔多个异步操作。因为可以使用一个回调方法负责许多不同的操作,所以可以使用此参数来传递规定异步操作的字符串或数据值。因为还没使用回调方法这里可以使用null。
所返回的IAsyncResult对象是读取进程的抽象表示。它保护许多属性和方法,允许查询进程的状态,以及判断进程是否结束了。
为了完成读取进程,就要调用EndRead()方法,并传入从BeginRead()调用返回的IAsyncResult对象。
例子UseIAsyncResult见下载。