版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、-基于C#语言,主讲教师:钱 哨 本课学时:72课时 联系方式:,Windows程序设计,第三章、文件处理,本章主要内容介绍3.1 windows和窗体3.2 Visual Stutio .net IDE简介3.3 事件处理,CONTENT,本章学习目标:,了解System.IO 命名空间 掌握读写文本文件的方法 掌握向文件读写二进制数据的方法 掌握读写内存流的方法,3.1 System.IO 命名空间,另存为 .xls 文件,另存为 .bmp 文件,另存为 .txt 文件,以字节形式向磁盘写数据通常称为字节流(比特流)。存储在磁盘上的字节集合称为文件,3.1 System.IO 命名空间,3
2、.1 System.IO 命名空间,1、System.io类介绍,3.1 System.IO 命名空间,2、File类的常用方法,3.1 System.IO 命名空间,试一试: 把C:WinNTWin.INI文件拷贝到C:下的代码,怎么写?,using System.IO; private void button1_Click(object sender, EventArgs e) string path = C:WINDOWSIE4 Error Log.txt; string target = c:1.txt; if (!File.Exists(path) MessageBox.Show(对
3、不起,未发现路径文件!); else File.Copy(path,target); MessageBox.Show(复制成功!); ,3.1 System.IO 命名空间,功能改进:【代码见下】,3.1 System.IO 命名空间,3、Fileinfo类的常用方法,3.1 System.IO 命名空间,更改代码: 此次我们通过更换FileInfo类执行同样的动作;,using System.IO; private void button1_Click(object sender, EventArgs e) string path = C:WINDOWSIE4 Error Log.txt;
4、string target = c:1.txt; FileInfo myfile = new FileInfo(path); if (!myfile.Exists) MessageBox.Show(对不起,未发现路径文件!); else myfile.CopyTo(target); MessageBox.Show(复制成功!); ,3.1 System.IO 命名空间,案例练习:显示文件的基本信息:【案例见下】,3.1 System.IO 命名空间,FileInfo类和File类 两者都提供对文件类似的操作 File为静态类,直接使用;FileInfo需要实例化后才能使用 。 从性能上考虑,如
5、果你要多次操作文件,不管是针对相同的,还是不同的,请使用FileInfo,说白了,单打独斗File最棒,群殴则首推FileInfo。 每次通过File类调用某个方法时,都要占用一定的cpu,而FileInfo类只在创建FileInfo对象时执行一次安全检查。,3.1 System.IO 命名空间,4、文件夹类Directory的常用方法,3.1 System.IO 命名空间,4、文件夹基本操作实验【代码见下】,3.1 System.IO 命名空间,System.IO 命名空间,继承类,FileStream 类,File 类,5、 File类的常用操作的静态方法,3.1 System.IO 命名
6、空间,5、 File类的常用操作的静态方法练习,3.2 文件流类Filestream,FileStream实例用于读写文件中的数据。要构造FileStream实例,需要以下4条信息: 要访问的文件。 表示如何打开文件的模式。例如,创建一个新文件或打开一个现有的文件。如果打开一个现有的文件,写入操作是覆盖文件原来的内容,还是添加到文件的末尾? 表示访问文件的方式 是只读、只写,还是读写? 共享访问表示是否独占访问文件。如果允许其他流同时访问文件,则这些流是只读、只写,还是读写文件?,3.2 文件流类Filestream,1、filestream的构造函数,在构造函数中使用的 FilePath,
7、FileMode, FileAccess, FileShare分别是指:使用指定的路径、创建模式、读/写权限和共享权限,3.2 文件流类Filestream,1、filestream的构造函数,注意,对于FileMode,如果要求的模式与文件的现有状态不一致,就会抛出一个异常。如果文件不存在,Append、Open和Truncate会抛出一个异常,如果文件存在,CreateNew会抛出一个异常。Create和OpenOrCreate可以处理这两种情况,但Create会删除现有的文件,创建一个新的空文件。FileAccess 和FileShare枚举是按位标志,所以这些值可以与C#的按位OR运算
8、符|合并使用。,FileMode 和FileShare,FileAccess,FileMode Append Create CreateNew Open OpenOrCreate Truncate,FileShare None Read Write ReadWrite, FileStream fstream = new FileStream(Test.cs, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None); ,FileAccess Read Write ReadWrite,FilePath:将封装的文件的相对路径或绝对路
9、径,1、filestream的构造函数,3.3 文件读写例子 4-1文件流filestream综合案例,第一步:建立CS文件,并准备填写关于文件操作的各种方法,具体代码见下(1),第二步:建立窗体文件,样式如下图所示,具体代码见下(2),如何通过用户选择文件夹,获取文件夹信息 如何通过用户选择文件,获取文件信息。 如何通过文件流建立一个新的文本文件。 如何打开文本文件后重新写文本信息流 如何在C#中定义文件和文件夹? 文件流的资源释放意义以及释放资源的基本顺序。,3.3 文件读写例子 4-2 文件流filestream综合案例【随堂练习】,【本案例您将学习到】,充分了解和学习文件对话框机制 文
10、本文件的文件夹,文件管理。 文本文件综合操作:复杂编辑,综合查询,删除,插入等操作。,3.3 文件读写例子 4-3 文件流filestream综合案例【随堂练习】,【本案例您将学习到】,3.4 读写二进制文件,要使用 BinaryReader 和 BinaryWriter 类 这两个对象都需要在FileStream上创建,FileStream filestream = new FileStream(Filename, FileMode.Create); BinaryWriter objBinaryWriter = new BinaryWriter(filestream);,最后研究的读取器/编
11、写器组是BinaryReader和BinaryWriter,它们都从System.Object直接派生。这些类型可以让我们从基层流中以简洁的二进制格式读取或写入离散数据类型。BinaryWriter类型定义了一个多次重载的Write()方法,用于把数据类型写入基层的流。除了Write()方法,BinaryWriter还提供了另外一些成员让我们能获取或设置从Stream派生的类型,并且提供了随机数据访问的支持。,二进制文件读写对象,BinaryReader,BinaryWriter,写二进制文件案例(1)图片的存储与复制,运行前效果,运行后效果,图片文件二进制流的读取并显示在图像控件之中; 如何
12、将图像控件图像读取到内存流,并另外存储。 saveFileDialog控件在另存文件中的作用。,【本案例您将学习到】,写二进制文件案例(2)图片文件在数据库之中的存储与读取,运行前效果,运行后效果,图片类型数据如何存储在数据库之中; 如何从数据库的图片数据中读出数据并显示图片信息。 二进制流和内存流在图片处理过程之中的联合使用。,【本案例您将学习到】,3.5 读写内存流,抽象类,MemoryStream,BufferedStream,对内存而不是对磁盘进行数据读写 减少了对临时缓冲区和文件的需要,对缓冲区进行数据读写 允许操作系统创建自己的缓冲区 输入/输出效率高且速度更快 在网络通讯的时候经
13、常会使用到,Stream 类,1、 读写内存流 MemoryStream 类,MemoryStream 类创建这样的流,该流以内存而不是磁盘或网络连接作为支持存储区。MemoryStream 封装以无符号字节数组形式存储的数据,该数组在创建 MemoryStream 对象时被初始化,或者该数组可创建为空数组。可在内存中直接访问这些封装的数据。内存流可降低应用程序中对临时缓冲区和临时文件的需要。,FileStream对象的数据来自文件,而MemoryStream对象的数据来自内存缓冲区。这两个类都继承自Stream类。 MemoryStream的数据来自内存中的一块连续区域,这块区域称为“缓冲区
14、(Buffer)”。可以把缓冲区看成一个数组,每个数组元素可以存放一个字节的数据。 在创建MemoryStream对象时,可以指定缓冲区的大小,并且可以在需要的时候更改。,FileStream对象与MemoryStream对象的区别:,1、 读写内存流 MemoryStream 类,其基本的构造函数如下:,1、 读写内存流 MemoryStream 类,内存流的Length属性代表了其中存放的数据的真实长度,而Capacity属性则代表了分配给内存流的内存空间大小。 可以使用字节数组创建一个固定大小的MemoryStream,MemoryStream mem = new MemoryStrea
15、m(buffer); /这时,无法再设置Capacity属性的大小。,还可以创建只读的内存流对象。,MemoryStream mem = new MemoryStream(buffer,false);,1、 读写内存流 MemoryStream 类,MemoryStream 类案例:,运行前效果,运行后效果,2、读写缓存流 BufferedStream 类,BufferedStream 类:给另一流上的读写操作添加一个缓冲层。,缓冲区是内存中的字节块,用于缓存数据,从而减少对操作系统的调用次数。因此,缓冲区可提高读取和写入性能。使用缓冲区可进行读取或写入,但不能同时进行这两种操作。Buffer
16、edStream 的 Read 和 Write 方法自动维护缓冲区。 BufferedStream 可写在某些类型的流周围。它提供从基础数据源或储存库读取字节以及将字节写入基础数据源或储存库的实现。使用 BinaryReader 和 BinaryWriter 读取和写入其他数据类型。 BufferedStream 用于在不需要缓冲区时防止缓冲区降低输入和输出速度。如果您读取和写入的大小始终大于内部缓冲区的大小,那么 BufferedStream 可能甚至无法分配内部缓冲区。BufferedStream 也在共享缓冲区中缓冲读取和写入。假设您几乎始终执行一系列读取或写入操作,而很少在读取和写入之间切换。,2、读写缓存流 BufferedStream 类,public BufferedStream(Stream StName);,public BufferedStream(Stream StName, int bsize);,使用默认的缓冲区大小 4096 字节初始化,使用指定的缓冲区大小初始化,BufferedStream 类
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- JNJ-39758979-Standard-生命科学试剂-MCE
- 2026年护理健康评估的测试题及答案
- 2026年测试细心的心理测试题及答案
- 2026年班长下台的阅读测试题及答案
- 2026年线上入团测试题及答案
- 2026年招聘保安测试题及答案
- 2026年数字孪生预测试题及答案
- 2026年琦玉吃饭测试题及答案
- 2026年先面试再做测试题及答案
- 新生儿病区人员管理制度
- 出入库登记表模板
- 新生儿NICU专科十大安全质量目标
- 计算机操作系统知到智慧树章节测试课后答案2024年秋青岛大学
- DLT 593-2016 高压开关设备和控制设备
- 防抢、防盗、防骗培训知识
- JBT 9214-2010 无损检测 A型脉冲反射式超声检测系统工作性能测试方法
- 苏教版四年级数学下册第七单元《三角形平行四边形和梯形》测试卷(含答案)
- 健康生活预防癌症智慧树知到期末考试答案2024年
- 《车险基础知识培训》
- 《外科实习作》课件
- 通用电子嘉宾礼薄
评论
0/150
提交评论