1、第7章 文件操作,7.1 文件概述,7.2 System.IO模型,7.3 文件与目录类,7.4 文件的读与写,7.1 文件概述,1顺序文件(Sequential File) 顺序文件是由一系列的ASCII码格式的文本行组成的,每行的长度可以不同,文件中的每个字符都表示一个文本字符或文本格式设置序列(如换行符等)。顺序文件中的数据是按顺序排列的,数据的顺序与其在文件中出现的顺序相同。 2随机文件(Random Access File) 随机文件是以随机方式存取的文件,由一组长度相等的记录组成。在随机文件中,记录包含一个或多个字段(Field),字段类型可以不同,每个字段的长度也是固定的,使用前
2、须事先定好。此外,每个记录都有一个记录号,随机文件打开后,可以根据记录号访问文件中的任何记录,不需像顺序文件那样顺序进行。,7.1 文件概述,3二进制文件(Binary File) 二进制文件是以二进制方式保存的文件。二进制文件可以存储任意类型的数据,除了不假定数据类型和记录长度外,二进制访问类似于随机访问,但是,必须准确地知道数据是如何写入文件的,才能正确地读取数据。,7.2 System.IO模型,7.2.1 System.IO命名空间的资源 System.IO模型中的资源由System.IO命名空间提供。该命名空间含有对数据流和文件进行同步或异步读写的类、结构和枚举类型,表7.1、表7.
3、2、表7.3分别列出了System.IO命名空间提供的部分常用的类、结构和枚举。,7.2.2 System.IO命名空间的功能,总的来看,System.IO命名空间提供了如下功能(括号中是提供相应功能的类): (1) 建立、删除、管理文件和文件夹(File和Directory) (2) 监控文件和文件夹的访问操作(FileSystemWatcher) (3) 对流进行单字节字符或字节块的读写操作(SystemReader和SystemWriter) (4) 对流进行多字节字符的读写操作(SystemReader和SystemWriter) (5) 对流进行字符的读写操作(SystemReade
4、r和SystemWriter) (6) 对字符串进行字符的读写操作,并允许把字符串作为字符流处理(StringReader和StringWriter) (7) 从一个流中读取数据类型和对象,或将数据类型和对象写入流中(BinaryReader和BinaryWriter),7.2.2 System.IO命名空间的功能,(8) 文件的随机访问(FileStream) (9) 系统性能优化(MemoryStream和BufferedStream) (10) 枚举文件或文件夹的属性(FileAccess、FileMode、FileShare、FileAttributes、DirectoryAttrib
5、utes) (11) 监控文件或文件夹可能的改变(WatcherChangeTypes) (12) 枚举文件或文件夹可能的改变(ChangedFilters) (13) 指定监控的文件或文件夹(WatcherTarget) (14) 指定文件的相对位置(SeekOrigin),7.3 文件与目录类,7.3.1 Directory类和DirectoryInfo类 对文件夹的操作可以使用Directory类或DirectoryInfo类。Directory类中包含许多静态方法,可以直接使用该类的静态方法创建、移动和删除文件夹。表7.4分别列出了Directory类的主要方法。,7.3.1 Dire
6、ctory类和DirectoryInfo类,DirectoryInfo类对象可以表示一个特定的文件夹,读者可以在该对象上执行与Directory类相同的操作,还可以使用它列举子文件夹和文件。DirectoryInfo类的主要方法如表7.5所示。,7.3.1 Directory类和DirectoryInfo类,【例7.1】利用Directory类和DirectoryInfo类读取C盘的文件夹及子文件夹,将文件夹显示在TreeView控件中,当选择其中的文件夹后将其子文件夹显示在ListView控件中。 双击窗体添加Form1的“Load”事件,以及添加treeView1的 “AfterSelec
7、t”事件。事件代码所示。 运行程序,选择左边的“C: Documents and Settings”文件夹,结果如图7.1所示。,7.3.2 File类 和FileInfo类,与Directory类相似,File类提供了用于创建、复制、移动、删除和打开文件的静态方法,并协助创建FileStream对象。表7.6列出了File类的主要方法。,7.3.2 File类和FileInfo类,FileInfo对象中记录了文件的文件名、大小、创建时间等属性,如果只需要获取文件夹中的文件名列表,则可以使用Directory类的GetFiles()方法获得文件夹中文件名的字符串数组。表7.7列出了FileIn
8、fo类的主要方法。,7.3.2 File类和FileInfo类,【例7.2】 利用File类在项目文件夹中创建一个命名为“abc”的文本文件,利用FileInfo类读取项目文件夹中所有文件以及大小和创建时间并显示在ListView控件中。 新建WinForm项目,在Form1的设计视图中将此窗体调整到适当的大小并将 “Text”属性设为“File类和FileInfo类”。从工具箱中拖放1个ListView控件到窗体中并调整到适当大小。添加的命名空间:using System.IO; 在窗体设计器中双击窗体添加Form1的“Load”事件,事件代码所示。 运行程序,程序运行后如图7.2所示。,7
9、.3.3 Path类,Path类的所有成员都是静态的,表7.8列出了该类的常用成员和说明。 例如获取项目的绝对路径代码如下: System.IO.Path.GetFullPath(“);,7.3.4 读取驱动器信息,.NET2.0以上的类库中新增了DriveInfo类,该类增强了.NET Framework以前版本中Directory类的GetLogicalDrivers()方法,使用它可以获得服务器的本地文件系统注册的信息,如:每个驱动器的名称、类型、容量和状态等信息。DriveInfo类的主要成员列于表7.9中。,7.3.4 读取驱动器信息,【例7.3】利用DriveInfo类检索计算机上
10、的所有逻辑驱动器的驱动器名称并显示在下拉框控件中,当选择其中某个驱动器后将其中的所有文件夹显示在树视图控件中。 新建WinForm项目,在Form1的设计视图中将此窗体调整到适当的大小并将 “Text”属性设为“DriveInfo类”。从工具箱中拖放1个TreeView和1个ComboBox1控件到窗体中并调整到适当大小。添加命名空间为:using System.IO; 双击窗体添加Form1的“Load”事件,同时添加comboBox1的“SelectedIndexChanged”事件代码所示。,7.3.4 读取驱动器信息,运行程序,选择C盘,运行结果界面如图7.3所示。,7.4 文件的读与
11、写,7.4.1 流 该模型的核心是Stream类和Reader/Writer类。图7.4显示了.NET Framework中基本的I/O流模型。,7.4.1 流,Stream类提供了读写I/O数据的基本功能,因为它是一个抽象类,所以在使用时应使用它的派生类。表7.10列举了常用的Stream类的派生类。,7.4.1 流,.NET Framework提供了许多Reader类和Writer类,它们都根据特定的规则进行设计,把对流的读写操作封装起来,这样开发人员就可以集中精力处理数据。表7.11列出了常用的Reader类和Writer类。,7.4.2 读写文件,StreamReader类可以从流或文
12、件读取字符。在创建StreamReader类的对象时,可以指定一个流对象,也可以指定一个文件路径,创建对象之后就可以调用它的方法,从流中读取数据,StreamReader类提供了如表7.12所示的常用方法从流中读取数据。,7.4.2 读写文件,StreamWriter类的方法可以实现向文件中写入内容的功能,StreamWriter类以一种特定的编码向字节流中写入字符。表7.13列出了StreamWriter 类提供了常用的方法将字符写入流或文件中。,7.4.3 读写二进制文件,BinaryReader类和BinaryWriter类有很多成员方法,如表7.14和表7.15分别列出了这两个类的常用
13、方法。,7.4.3 读写二进制文件,7.4.3 读写二进制文件,【例7.4】 利用上面介绍的知识创建一个WinForm应用程序。可以读写文本以及读写二进制文件。 新建WinForm项目,在Form1的设计视图中将此窗体调整到适当的大小并将 “Text”属性设为“读写文件”。从工具箱中拖放1个TextBox和4个Button控件到窗体中并调整到适当大小。textBox1的Multiline和ScrollBars的属性值分别设置为“True”和“Both”。添加命名空间为:using System.IO; 切换到设计视图,分别双击4个按钮,添加代码,代码所示。,7.4.3 读写二进制文件,运行程序,在文本框中输入“青花瓷”歌词并单击“文本保存”按钮,在弹出的“写文件”保存对话框中输入文件名“青花瓷”并单击“保存”按钮则保持了一个命名为“青花瓷”的文本文件,如图7.5所示。单击“文本读取”按钮,选择“青花瓷”文本文件,结果如图7.6所示。单击“二进制保存”按钮,命名为“青花瓷”并单击“保存”按钮则保持了一个命名为“青花瓷”的二进制文件,如图7.7所示。单击“二进制读取”按钮,选中“青花瓷.bin”,结果同图7.7相同。,