《C面向对象程序设计》第11章用流进行文件输入和输出汇总

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。


任务11.3:从数据库读取Image类型数据并保存为图像文件

解决方案:

(1)在D盘中创建“sh”目录。 (2)打开前一个示例创建的TestIO项目,在解决方案资源管理器中双击Form1.cs,打开Windows窗体,再向Windows窗体中添加一 个button按钮,将其text属性设置为“读取数据存入文件”。 (3)双击【读取数据存入文件】按钮,在其Click事件处理程序中输入如下代码: (4)测试代码。按F5键编译并运行应用程序,单击【读取数据存入文件】按钮,如果从数据库读取的图像数据存入指定的图像文件成 功,则出现如图11.4所示的消息框。在D盘创建的sh目录中可看到myimage.gif图像文件。
主要内容与学习目标


主要内容: – (1)文件与流的概念。 – (2)使用FileStream。 – (3)将图像文件存入数据库、从数据库读取Image类型数据并以图像文件保存。 – (4)使用FileStream.Seek方法随机访问文件。 – (5)向文件追加数据。 – (6)内存和缓冲流、从指定的MemoryStream对象创建Image对象。 – (7)StreamReader和StreamWriter。 – (8)BinaryReader和BinaryWriter。 – (9)序列化对象。 – (10可视化继承。 – (11)顺序访问文件。 – (12)随机存取文件。 – (13)使用序列化对象存储数据。 学习目标: – (1)对文件进行新建、读、写和更新操作。 – (2)熟悉StreamReader和StreamWriter的使用。 – (3)熟悉BinaryReader和BinaryWriter的使用。 – (4)熟悉MemoryStream的使用。 – (5)理解序列化和采用序列化从文件读出对象及从文件写入对象。 – (6)熟悉顺序访问和随机访问文件处理。
图11.1 程序运行结果
图11.2 打开文件对话框
图11.3 消息框
图11.4 消息框
11.1.2 随机访问文件


当打开一个流时,流指针一般位于流的第一个字节上。大多数流支持定位(seek),也就可以 将内部流指针移到任意位置。因此当我们要在读操作和写操作之间进行转换时,可以通过定 位避免关闭和打开流,也就是不必采用“创建→写→关闭→打开→读→关闭”模式。 FileStream对象支持使用Seek方法随机访问文件。Seek方法允许把读/写位置移动到文件内 的任何位置。这是通过字节偏移参考点参数来完成的。字节偏移量是相对于查找参考点而言 的,该参考点可以是基础文件的开始、当前位置或结尾,分别由SeekOrigin类的3个属性 Begin(指定流的开头)、Current(指定流内的当前位置)、End(指定流的结尾)表示。 任务11.4:定位操作 – 解决方案: (1) 将任务11.1代码文件修改 (2) 按F5键编译并运行应用程序,输出结果如图11.5所示。
11.1 文件与流


文件是永久存储的由一些特定顺序的字节组成的一个有序的、具有名称的集合。因 此,对于文件,人们常会想到目录路径、磁盘存储、文件和目录名等方面。流提供 一种向后备存储器写入字节和从后备存储器读取字节的方式,后备存储器是一个存 储媒介,例如磁盘或内存。正如除磁盘外存在多种后备存储器一样,除文件流之外 也存在多种流。例如,还存在网络流、内存流等。Stream类及其派生类提供这些 不同类型的输入和输出的一般视图。 所有表示流的类都是从Stream类继承的。Stream是所有流的抽象基类,所以它的 对象不能被实例化。Stream对象具有以下一种或多种能力。

图11.5 定位操作
11.1.3 向文件追加数据

任务11.5:向文件追加数据
– –
(1) 将任务11.4中的代码文件修改 (2) 按F5键编译并运行应用程序,输出结果如图11.7所示。由输出 结果可知已向文件追加了5个字符abcde
图11.7 追加数据
11.2 内存和缓冲流


与FileStream一样,MemoryStream类和BufferedStream类也派生自抽象的Stream类。因此 MemoryStream类和BufferedStream类共享许多性质和功能。设计它们的目的都是为了对内 存进行数据读写,而不是对持久性存储进行读写。如果需要,它们都可与另一种流(比如一个文 件)相关联,因此它们可充当内存和持久性存储之间的缓冲区。MemoryStream类提供了 WriteTo(用于向另一个流进行写操作)等方法。同样,BufferedStream对象一般在进行构造时 与另一个流相关联,并且当你关闭BufferedStream时它的内容被刷新到相关联的流。 任务11.6:显示图像
第11章 用流进行文件输入和输出
主要内容与学习目标 11.1 文件与流 11.2 内存和缓冲流 11.3 StreamReader和StreamWriter 11.4 二进制读取器和写出器 11.5 序列化对象 11.6 可视化继承 11.7 顺序访问文件 11.8 随机存取文件 11.9 使用序列化对象存储数据



读:将数据从一个流传输到一个数据结构(如字节数组)中。 写:将数据从一个数据结构写到一个流中。 定位:查询和修改流中的当前位置。
11.1.1 FileStream 11.1.2 随机访问文件 11.1.3 向文件追加数据
11.1.1 FileStream

FileStream类继承于Stream类,它主要用于文件的输入和输出。 任务11.1:使用FileStream

解决方案:
ຫໍສະໝຸດ Baidu

(1)新建一空项目Testfilestream。 (2)向项目中添加代码文件 (3)添加引用System.Windows.Forms。 (4)按F5键编译并运行应用程序,输出结果如图11.1所示。

任务11.2:将图像文件存入数据库

解决方案:

(1)创建一Windows应用程序项目,将项目的名称命名为TestIO。 (2)向Windows窗体上添加一命令按钮button1,将该按钮的Text属性设置为“选择图像存入数据库”,然后向窗体添加一文件对话 框控件openFileDialog1。 (3)在窗体类Form1的前面添加如下语句: (4)双击【选择图像存入数据库】按钮,在该按钮的Click事件中编写代码: (5)测试代码。按F5键编译并运行应用程序,单击【选择图像存入数据库】按钮,在出现的对话框中(如图11.2所示),选择一图像文 件,单击【打开】按钮,如果图像文件存入数据库,则出现如图11.3所示的消息框。
相关文档
最新文档