C#应用程序设计教程 第2版 普通高等教育“十一五”国家级规划教材 教学课件 ppt 作者 耿肇英 周真真 耿燚 第4章 文件和流

上传人:E**** 文档编号:89370556 上传时间:2019-05-24 格式:PPT 页数:64 大小:275.50KB
返回 下载 相关 举报
C#应用程序设计教程 第2版  普通高等教育“十一五”国家级规划教材  教学课件 ppt 作者  耿肇英 周真真 耿燚 第4章 文件和流_第1页
第1页 / 共64页
C#应用程序设计教程 第2版  普通高等教育“十一五”国家级规划教材  教学课件 ppt 作者  耿肇英 周真真 耿燚 第4章 文件和流_第2页
第2页 / 共64页
C#应用程序设计教程 第2版  普通高等教育“十一五”国家级规划教材  教学课件 ppt 作者  耿肇英 周真真 耿燚 第4章 文件和流_第3页
第3页 / 共64页
C#应用程序设计教程 第2版  普通高等教育“十一五”国家级规划教材  教学课件 ppt 作者  耿肇英 周真真 耿燚 第4章 文件和流_第4页
第4页 / 共64页
C#应用程序设计教程 第2版  普通高等教育“十一五”国家级规划教材  教学课件 ppt 作者  耿肇英 周真真 耿燚 第4章 文件和流_第5页
第5页 / 共64页
点击查看更多>>
资源描述

《C#应用程序设计教程 第2版 普通高等教育“十一五”国家级规划教材 教学课件 ppt 作者 耿肇英 周真真 耿燚 第4章 文件和流》由会员分享,可在线阅读,更多相关《C#应用程序设计教程 第2版 普通高等教育“十一五”国家级规划教材 教学课件 ppt 作者 耿肇英 周真真 耿燚 第4章 文件和流(64页珍藏版)》请在金锄头文库上搜索。

1、第四章 文件和流,学习目的,C#语言采用了流的概念读写文件。本章介绍在C#语言中,能够处理目录(文件夹),能够处理文件,能够使用流的概念读写文件。 文件是用路径来定位的,描述路径有3种方式:绝对路径、当前工作盘的相对路径、相对路径。,主要内容,4.1 用流读写文件 4.2 File类和FileInfo类 4.3 Directory类和DirectoryInfo类 4.4 例子:在指定文件夹中查找文件 4.5 例子:鼠标拖放打开文件 4.6 例子:拆分和合并文件,4.1 用流读写文件,C#把读写的文件看作是顺序字节流,用抽象类Stream代表流。Stream类有许多派生类,如 FileStrea

2、m类,以字节为单位读写文件; BinaryRead类和BinaryWrite类,以基本数据类型为单位读写文件,可以从文件直接读写bool、String、int16、int等基本数据类型数据; StreamReader和StreamWriter类以字符或字符串为单位读写文件。 使用流读写文件必须引入命名空间:System.IO。,4.1.1 FileStream类读写字节,使用FileStream类可以建立文件流对象,用来打开和关闭文件,以字节为单位读写文件。也可对与文件相关的操作系统句柄进行操作,如管道、标准输入和标准输出。FileStream类对象能对输入输出进行缓冲,从而提高性能。该类常用

3、属性、方法如下: 属性CanRead、CanSeek、CanWrite:检查流对象是否可以读、定位、写。 属性Length:以字节为单位表示流对象长度,即文件的长度。 属性Position:获取或设置流对象当前读写位置。 构造函数public FileStream(string path,FileMode mode,FileAccess access):参数path是文件的相对路径或绝对路径,构造函数将建立参数path指定文件的FileStream类对象。共有8个构造函数。,方法void Write(byte array,int offset,int count):将参数1指定数组中多个字节写

4、入流,要写入流的第1个字节是arrayoffset,参数3为要写入的字节数。 【例4.1】写字节数组数据到文件的程序如下,该程序将建立文件d:/g1.bin。 using System; using System.IO; class Program static void Main(string args) byte data=new byte10; for(int i=0;i10;i+) datai=(byte)i; FileStream fs=new FileStream(“d:/g1.bin“,FileMode.Create); fs.Write(data,0,10); fs.Close

5、(); ,方法int Read(byte array,int offset,int count):从流中读数据写入字节数组array,读入的第1个字节写入arrayoffset,参数3为要读入的字节数。返回值为所读字节数,由于可能已读到文件尾部,其值可能小于count,甚至为0。 【例4.2】读一个文件所有字节到数组并在屏幕显示的程序如下,请先用上例建一个文件,然后用此例读出。 using System.IO; class Program static void Main() FileStream fs=new FileStream(“d:/g1.bin“,FileMode.Open); by

6、te data=new bytefs.Length; long n=fs.Read(data,0,(int)fs.Length); fs.Close(); Console.WriteLine(“文件的内容如下:“); foreach(byte m in data) Console.Write(“0,“,m); ,方法long Seek(long offset,SeekOrigin origin):该方法移动文件读写位置到参数2指定位置加上参数1指定偏移量处,参数2可以是SeekOrigin.Begin、SeekOrigin.End、SeekOrigin.Current,分别为开始位置、结束位置

7、、当前读写位置。 【例4.3】使用方法Seek例子如下。 using System; using System.IO; class Program static void Main() FileStream fs=new FileStream(“d:/g1.bin“,FileMode.Open); fs.Seek(-4,SeekOrigin.End); Console.WriteLine(“读写位置:0,能定位:1“,fs.Position,fs.CanSeek); Console.WriteLine(“能读:0,能写:1“,fs.CanRead,fs.CanWrite); fs.Close(

8、); ,注意建立流对象fs的构造函数无第3个参数,因此按读写方式打开。,程序运行结果如下: 读写位置:6,能定位:true 能读:true, 能写:true,4.1.2 BinaryReader、BinaryWriter类读写基本数据类型,使用BinaryReader和BinaryWriter类可以从文件直接读写bool、String、int16、int等基本数据类型数据。常用BinaryWriter类方法如下: 构造函数BinaryWriter(Stream input):参数为FileStream类对象。 方法viod Write(数据类型 Value):写入参数指定的数据类型的一个数据,

9、数据类型可以是基本数据类型,例如,int、bool、float等。,【例4.4】写int类型数据程序如下: class Program static void Main() FileStream fs=new FileStream(“d:/g1.dat“,FileMode.Create); BinaryWriter w=new BinaryWriter(fs); for(int i=0;i10;i+) w.Write(i); w.Close(); ,常用BinaryReader类方法如下: 构造函数BinaryReader(Stream input):参数为FileStream类对象。 方法R

10、eadBoolean、ReadByte、ReadChar:返回一个指定类型数据。方法没有参数。 方法byte ReadBytes(int count):返回字节数组保存从流读出参数指定的字节。,【例4.5】读int类型数据程序如下,用上例建一个文件,用此例读出。 class Program static void Main() int data=new int10; FileStream fs=new FileStream(“d:/g1.dat“,FileMode.Open); BinaryReader r=new BinaryReader(fs); for(int i=0;i10;i+) d

11、atai=r.ReadInt32(); r.Close(); Console.WriteLine(“文件的内容如下:“); foreach(int m in data) Console.Write(“0,“,m); ,4.1.3 StreamReader和StreamWriter类读写字符串,读写字符串可以用StreamReader和StreamWriter类。常用StreamWriter类方法如下: 构造函数StreamWriter(string path,bool append):path是要写文件的路径,如果该文件存在,并且append为false,则该文件被改写。如果该文件存在,并且a

12、ppend为 true,则数据被追加到该文件中。该文件不存在,将创建新文件。 方法void Writer(string value):将字符串写入流。 方法void Writer(char value):将字符写入流。,【例4.6】写字符串类型数据程序如下: using System; using System.IO; class Program static void Main() StreamWriter w=new StreamWriter(“d:/g.text“,false); w.Write(100); w.Write(“100个“); w.Write(“End of file“);

13、 w.Close(); ,常用StreamReader类方法如下: 构造函数StreamReader(string path):参数是要读文件的路径。 方法int Read():从流中读取一个字符,并使读字符位置移动到下一个字符。返回代表读出字符ASCII字符值的int类型整数,如果没有字符可以读出,返回-1。如果sr是StreamReader对象,读取一个字符的用法如下:char c=(char)sr.Read()。 方法string ReadLine():从流中读取一行字符并将数据作为字符串返回。行的定义是:两个换行符 (“n“或“rn“)之间的字符序列。返回的字符串不包含回车或换行符。,

14、【例4.7】读字符串程序如下,请先用上例建一个文件,然后用此例读出。 using System.Collections.Generic; class Program static void Main() string sLine=“; List arrText = new List(); using(StreamReader objReader=new StreamReader(“d:/g.text“) dosLine=objReader.ReadLine(); if(sLine!=null) arrText.Add(sLine); while(sLine!=null); Console.Wr

15、iteLine(“文件的内容如下:“); foreach(string m in arrText) Console.Write(“0“,m); ,程序运行结果: 文件的内容如下: 100100个End of file,4.1.4 序列化,对于一个复杂的数据结构,例如数组,用以上方法存入文件,就显得过于复杂了。为了简化这类问题,C#提出了序列化的概念,序列化包括序列化和反序列化,所谓序列化就是把类的对象作为一个整体存入文件,反序列化则是相反的过程。 【例4.8】下边的例子完成了一个哈希表对象的序列化。 using System.Collections.Generic; using System.

16、Runtime.Serialization.Formatters.Binary; using System.Runtime.Serialization; class Program static void Main() Dictionary h=new Dictionary();,h.Add(“键1“, “值1“); h.Add(“键2“, “值2“); h.Add(“键3“, “值3“); FileStream fs = new FileStream(“d:/d.dat“, FileMode.Create); BinaryFormatter formatter = new BinaryFormatter(); formatter.Serialize(fs, h); fs.Close(); fs = new FileStream(

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号