代码改变世界

C#学习笔记(二十二):使用文件高级

2006-04-05 11:35  努力学习的小熊  阅读(1293)  评论(0编辑  收藏  举报

监控文件结构:

这里使用的FileSystemWatcher类,可以对文件系统事件做出响应。

使用这个类前必须设置的属性

属性

说明

Path

它设置要被监控的文件或目录位置

NotifyFilter

这是NotifyFilters枚举值的组合,NotifyFilters枚举值规定在被监控的文件内要监控哪些内容。这些表示要被监控的文件或文件夹的属性。如果任何规定的属性发生了变化,则就引发事件。可能的枚举值是:AttributesCreationTimeDirectoryNameFileNameLastAccessLastWriteSecuritySize。注意可以通过二进制OR操作符联合使用这些枚举值

Filter

在其上监控文件的过滤器,例如:*.txt

设置后必须为它4种事件编写事件处理程序:ChangedCreatedDeletedRenamed

监控文件的例子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见下载。

 例子下载