.NET ,访问操作文件系统
流是序列化设备的抽象表示,序列化设备可以线性方式存储数据,并按同样方式访问。把设备变成抽象的,就可以隐藏流的底层目标和源,这种抽象级别支持代码重用,允许编写更通用的例程,不必担心数据传输方式的特性。
System.io中的类:
File 静态实用类,提供许多静态方法,用于移动,复制和删除文件
Directory 静态实用类,提供许多静态方法,用于移动,复制和删除目录
Path 实用类,用于处理路径名称
FileInfo 表示磁盘上的物理文件,该类包含处理此文件的方法,要完成对文件的读写工作,就必须创建stream对象
DirectoryInfo 表示磁盘上的物理目录,该类包含处理此目录的方法
FileStreamInfo 用作fileinfo和directoryinfo的基类,可以使用多态性同时处理文件和目录
FileStream 表示可写或可读,或二者均可的文件,此文件可以同步或异步的读写
StreamReader 从流中读取字符数据,可以使用filestream将其创建为基类
StreamWriter 向流写入字符数据,可以使用filestream将其创建为基类
FileSystemWatcher 用于监控文件和目录,提供了这些文件和目录发生变化时应用程序可以捕获的事件。
System.IO.Compression名称空间中提供压缩模式读写压缩文件:
DeflateStream 或者GZipStream表示在写入时自动压缩数据或在读取时自动解压缩的流
System.Runtime.Serialization名称空间及其子名称空间进行对象序列化,比如system.Runtime.Serialization.Formatters.Binary名称空间中的binaryFormatter类
Directory类中提供了一些enumerateXXX方法是.NET4新增的
如果进行单一调用,就使用静态类,如果进行一系列调用,则使用实例化的对象
使用filestream创建的流对象可以进行精确设置,比如操作和访问权限,该对象是按字节访问,可以实现随机访问,使用seek方法,访问起始点有三个(begin,current,end)
.NET4引用了一个新名称空间 system.IO.MemoryMappedFiles,它包含的类型(例如 memoryMappedFile)提供了另一种随机访问特大型文件的方式
使用system.text名称空间中的decoder类将原始字节转换为有用的项,比如字符:
Decoder d=encoding.utf8.getdecoder();
d.getchars();
将字符转换为字节可以用encoder类,类似的方法
使用readline方法一次读一行,也可以使用静态类的方法来读取,避免占用readtoend过多内存
system.Runtime.Serialization.Formatters.Binary名称空间中的binaryFormatter类和system.Runtime.Serialization.Formatters.soap名称空间中的soapFormatter类都实现了Iformatter接口,前者用于对象和二进制数据之间的序列化,后者用于对象和xml之间的序列化。
另外两个实现IFormatter接口的是objectStateFormatter(用于ASP.NET中序列化viewState),另一个是NetDateContractSerializer,用于序列化WCF数据合同
要把对象标记为可序列化才能序列化它们,因为一些对象的序列化效果不好,或包含敏感数据
成员还可以标记为不可序列化的特性
ISserializable接口用来定制序列化
Filesystemwatcher的使用很简单,首先设置一些属性,指定监控的位置,内容以及引发程序要处理的事件的时间,然后提供定制事件处理程序的地址,当发生重要事件时,filesystemwatcher就可以进行调用,最后打开filesystemwatcher,等待事件。
必须设置的属性为:
Path 要监控的文件的位置或目录
NotifyFilter 这是枚举值的组合,表示要监控的文件的属性,如果这些属性发生了变化,就引发事件
Filter 指定要监控哪些文件的过滤器,例如,*.txt
然后为事件编写处理程序,最后将enableRaisingEvents属性设置为true