收藏 分享(赏)

《C#_WinForm实践开发教程》chp3.文件处理.ppt

上传人:j35w19 文档编号:4775210 上传时间:2019-01-11 格式:PPT 页数:37 大小:1.32MB
下载 相关 举报
《C#_WinForm实践开发教程》chp3.文件处理.ppt_第1页
第1页 / 共37页
《C#_WinForm实践开发教程》chp3.文件处理.ppt_第2页
第2页 / 共37页
《C#_WinForm实践开发教程》chp3.文件处理.ppt_第3页
第3页 / 共37页
《C#_WinForm实践开发教程》chp3.文件处理.ppt_第4页
第4页 / 共37页
《C#_WinForm实践开发教程》chp3.文件处理.ppt_第5页
第5页 / 共37页
点击查看更多>>
资源描述

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 命名空

2、间,3.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.Sho

3、w(“对不起,未发现路径文件!“);elseFile.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.tx

4、t“;string target = “c:1.txt“;FileInfo myfile = new FileInfo(path);if (!myfile.Exists)MessageBox.Show(“对不起,未发现路径文件!“);elsemyfile.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 Memor

15、yStream(buffer); /这时,无法再设置Capacity属性的大小。,还可以创建只读的内存流对象。,MemoryStream mem = new MemoryStream(buffer,false);,1、 读写内存流 MemoryStream 类,MemoryStream 类案例:,运行前效果,运行后效果,2、读写缓存流 BufferedStream 类,BufferedStream 类:给另一流上的读写操作添加一个缓冲层。,缓冲区是内存中的字节块,用于缓存数据,从而减少对操作系统的调用次数。因此,缓冲区可提高读取和写入性能。使用缓冲区可进行读取或写入,但不能同时进行这两种操作。

16、BufferedStream 的 Read 和 Write 方法自动维护缓冲区。BufferedStream 可写在某些类型的流周围。它提供从基础数据源或储存库读取字节以及将字节写入基础数据源或储存库的实现。使用 BinaryReader 和 BinaryWriter 读取和写入其他数据类型。BufferedStream 用于在不需要缓冲区时防止缓冲区降低输入和输出速度。如果您读取和写入的大小始终大于内部缓冲区的大小,那么 BufferedStream 可能甚至无法分配内部缓冲区。BufferedStream 也在共享缓冲区中缓冲读取和写入。假设您几乎始终执行一系列读取或写入操作,而很少在读取

17、和写入之间切换。,2、读写缓存流 BufferedStream 类,public BufferedStream(Stream StName);,public BufferedStream(Stream StName, int bsize);,使用默认的缓冲区大小 4096 字节初始化,使用指定的缓冲区大小初始化,BufferedStream 类的构造函数,案例1:通过缓冲区交换数据,设置 “源文件名”的Enabled属性为false,总结,File是静态对象,提供对文件的创建、拷贝、移动和删除等一系列操作 File.Create(文件名)可以创建新的文件,并结合FileStream对象来进行读写操作 FileStream 和BinaryReader、BinaryWriter对象结合起来可对二进制数据进行操作 在C#中指明文件名的时候,要使用转义字符“” 内存流提供无法调整大小的数据流视图,而且只能向其写入 BufferedStream对象对缓冲区进行读写,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 实用文档 > 简明教程

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报