第八章数据流和文件

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
前面提到StreamReader和StreamWriter类在构造时都可以指定 编码方法。若写入文件时指定一种编码(例如ASCII),而读取文 件时指定另一种编码(例如UTF8),将会产生什么状况?试分析 其原因。
8.2 文件及文件夹的管理
在备忘录功能中多次用到了文件及文件夹的管理,如文件的备份, 删除备份(即删除文件)、判断文件或文件夹是否存在、判断文 件属性等,这些都需要使用.NET Framework提供的相关类实现。
也可通过GetEncoding方法获得指定代码页的编码。
StreamWriter类
构造方式与StreamReader类类似,它只能 用于写入文件。
构造时可以使用bool类型参数指定是否以追加方式打开,例如:
StreamWriter sw = new StreamWriter ("ReadMe.txt",true,Encoding.ASCII);
✓ 编码格ห้องสมุดไป่ตู้ ✓ 文件名或另一个流对象 例如:
StreamReader sw = new StreamReader("ReadMe.txt"); StreamReader sw = new StreamReader("ReadMe.txt",Encoding.UTF8); fs = new ("Log.txt", , ); StreamReader sr = new StreamReader(fs);
Encoding枚举
命名空间:System.Text
这个类是一个抽象基类,可以根据这个类定义许多类,其方法可 获取实际的文本编码。它的每个属性都返回相应类的一个实例, 可以使用的属性包括:
✓ ASCII ✓ Unicode ✓ UTF7 ✓ UTF8 ✓ UTF32 ✓ BigEndianUnicode
8.1.3 案例拓展
StreamReader和StreamWriter类
这两个类专用于读写文本文件 ➢ StreamReader.ReadLine()方法:读取一行文本 ➢ StreamWriter.WriteLine() :写入一行文本,并自动换行
StreamReader类
该类只能执行读操作。一般构造时提供两个参数:

要构造实例,需要以下4条信息:
✓ 要访问的文件。 ✓ 表示如何打开文件的模式。例如,创建一个新文件或打开一个现
有的文件。如果打开一个现有的文件写入操作是覆盖文件原来的 内容,还是添加到文件的末尾? ✓ 表示访问文件的方式——是只读、只写,还是读写? ✓ 共享访问——表示是否独占访问文件。如果允许其他流同时访问 文件,则这些流是只读、只写还是读写文件?
C#2008程序设计基础案例教程
第八章 数据流和文件
8.1 System.IO命名空间概述
System.IO命名空间中包含了文件、目录、路径和流等操作相关 的所有类。流与文件是既相关又有区别的两个概念。文件是一些 具有永久存储及特定顺序的字节组成的一个有序的、具有名称的 集合。相反,流提供一种向后备存储写入字节和从后备存储读取 字节的方式,后备存储包括软盘、硬盘、内存、网络等。与读写 文件对应的流称为文件流,除此之外也存在多种流,例如:网络 流、内存流和磁带流等。
、和枚举
构造实例的后三个参数值分别取、和枚举的枚举值。
枚举
值 Append、Create、CreateNew、Open、OpenOrCreate和Truncate Read、ReadWrite和Write Inheritable、None、Read、ReadWrite和Write
示例:构造实例方式
8.2.2 案例步骤
文件及文件管理的相关代码
其中,利用File类创建、复制和删除文件及判断文件是否存在,利 用Directory类创建文件夹及判断文件夹是否存在,还可以使用类 读取和修改文件属性。
和File类
后者只包含静态方法,无须实例化。
方法对比: ✓ 判断文件是否存在:Exists属性(前者)和Exists方法(后者) ✓ 创建文件:Creat方法 ✓ 删除文件:Delete方法 ✓ 复制文件:CopyTo方法(前者)和Copy方法(后者) ✓ 移动文件:MoveTo方法(前者)和Move方法(后者)
与一样,应在使用后关闭StreamReader和StreamWriter,例 如:
sw.Close();
8.1.4 案例思考
通过对备忘录功能的代码分析,我们发现在对日志文件进行读写 时,做法都是先构造实例,之后将StreamReader或 StreamWriter关联到这个流上。读者可以尝试修改代码,使之直 接用文件名作为参数构造StreamReader或StreamWriter实例, 并分析修改前后的区别。
fs = new ("Log.txt", , , );
对于,如果要求的模式与文件的现有状态不一致,就会抛出一个异常。 和枚举是按位标志,所以这些值可以与C#的按位OR运算符|合并使用。
流的关闭
使用完一个流后,就应关闭它,如案例中代码:
fs.Close();
关闭流会释放与它相关的资源,允许其他应用程序为同一个文件 设置流。在打开和关闭流之间,可以读写其中的数据,有许多方 法可以进行这样的读写。
8.1.1 案例功能
在图书借阅管理系统的备忘录窗口中(见下图),使用文件流的 读写存取日志。当加载窗体时,从文件Log.txt中读取日志信息显 示在窗口中。用户也可以在文本框中输入并添加新的日志信息, 点击“备份按钮”进行日志文件备份。
8.1.2 案例步骤
为“添加”、“删除”按钮和窗体的Load事件编写代码。 查看代码 可以看到,在代码中主要用到了类。(文件流)这个类主要用于 在二进制文件中读写二进制数据,也可以使用它读写任何文件。
DirectoryInfo和Directory类
后者只包含静态方法,无须实例化。
方法对比:
✓ 判断文件是否存在:Exists属性(前者)和Exists方法(后者) ✓ 创建文件夹:Create (前者)方法和CreateDirectory方法(后者) ✓ 删除文件夹:Delete方法 ✓ 移动文件夹:MoveTo方法(前者)和Move方法(后者)
相关文档
最新文档