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

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

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

1、第6章 文件和流,6.1 用流读写文件 6.2 File类和FileInfo类 6.3 Directory类和DirectoryInfo类,6.1 用流读写文件,C#把所有文件都看成是顺序字节流,用抽象类Stream代表一个流。Stream类有许多派生类,例如FileStream类,以字节为单位读写文件;BinaryRead类和BinaryWrite类,以基本数据类型为单位读写文件,可以从文件直接读写bool、String、int16、int等基本数据类型数据;StreamReader和StreamWriter类以字符或字符串为单位读写文件。本节首先介绍这些类的用法,然后介绍数据的序列化。使用

2、流读写文件必须引入命名空间:System.IO。,6.1.1 FileStream类读写字节,使用FileStream类可以建立文件流对象,用来打开和关闭文件,以字节为单位读写文件。也可对与文件相关的操作系统句柄进行操作,如管道、标准输入和标准输出。FileStream类对象能对输入输出进行缓冲,从而提高性能。 例子,写文件,写字节数组数据到文件的程序如下,该程序将建立文件d:/g1.bin。,using System; using System.IO; /使用文件必须引入的命名空间 class WriteFile static void Main() byte data=new byte10

3、; /建立字节数组 for(int i=0;i10;i+) /为数组赋值 datai=(byte)i; FileStream fs= /建立流对象 new FileStream(“d:/g1.bin“,FileMode.Create); /写data字节数组中的所有数据到文件 fs.Write(data,0,10); fs.Close() /不再使用的流对象,必须关闭。 /垃圾收集器不能自动清除流对象,读一个文件所有字节到数组并在屏幕显示的程序如下,请先用上例建一个文件,然后用此例读出。 using System; using System.IO; /使用文件必须引入的命名空间 class R

4、eadFile static void Main() FileStream fs= new FileStream(“d:/g1.bin“,FileMode.Open); byte data=new bytefs.Length; long n=fs.Read(data,0,(int)fs.Length);/n为所读字节数 fs.Close(); Console.WriteLine(“文件的内容如下:“); foreach(byte m in data) Console.Write(“0,“,m); ,移动文件读写位置 using System; using System.IO; /使用文件必须引

5、入的命名空间 class FileStreamProperty static void Main() FileStream fs= /无第3个参数 new FileStream(“d:/g1.bin“,FileMode.Open); /文件读写位置移到从文件尾部向前5个字节 fs.Seek(-4,SeekOrigin.End); Console.WriteLine(“读写位置:0, 能定位:1“,fs.Position,fs.CanSeek); Console.WriteLine(“能读:0, 能写:1“,fs.CanRead,fs.CanWrite); fs.Close(); ,6.1.2

6、BinaryReader、BinaryWriter 类读写基本数据类型,使用BinaryReader和BinaryWriter类可以从文件直接读写bool、String、int16、int等基本数据类型数据。 写int类型数据程序如下:,using System; using System.IO;/使用文件必须引入的命名空间 class WriteFile static void Main() FileStream fs=new FileStream(“d:/g1.dat“,FileMode.Create); BinaryWriter w=new BinaryWriter(fs); for(i

7、nt i=0;i10;i+) w.Write(i); /写入int类型数据 w.Close(); ,读int类型数据程序如下,先用上例建一个文件,然后用此例读出。 using System; using System.IO; /使用文件必须引入的命名空间 class ReadFile 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+) dat

8、ai=r.ReadInt32(); r.Close(); Console.WriteLine(“文件的内容如下:“); foreach(int m in data) Console.Write(“0,“,m); ,6.1.3 StreamReader和StreamWriter 类读写字符串,读写字符串可以用StreamReader和StreamWriter类。 写字符串类型数据程序如下: using System; using System.IO; class WriteFile static void Main() StreamWriter w=new StreamWriter(“d:/g.

9、text“,false); w.Write(100); /100首先转换为字符串,再写入。 w.Write(“100个“);/字符串之间用换行符(“n“或“rn“)分隔 w.Write(“End of file“);/一个字符串叫做文件中的一行 w.Close(); ,读字符串程序如下,请先用上例建一个文件,然后用此例读出。 using System; using System.IO; using System.Collections.Generic; /使用泛型集合类必须引入的命名空间 class ReadFile static void Main() string sLine=“; /建立

10、元素为string类型的List对象 List arrText = new List(); using(StreamReader objReader= new StreamReader(“d:/g.text“),/使用using语句以确保所涉及的文件在写入或读取操作后正确关闭 do sLine=objReader.ReadLine(); if(sLine!=null) arrText.Add(sLine); while(sLine!=null); Console.WriteLine(“文件的内容如下:“); foreach(string m in arrText) Console.Write(

11、“0“,m); ,6.1.4 序列化,对于一个复杂的数据结构,例如数组,用以上方法存入文件,就显得过于复杂了。为了简化这类问题,C#提出了序列化的概念,序列化包括序列化和反序列化,所谓序列化就是把类的对象作为一个整体存入文件,反序列化则是相反的过程。C#中的许多类都支持序列化,可以用如下方法判别一个类是否支持序列化: Dictionary h =/建立泛型哈希表对象 new Dictionary(); Type myType=h.GetType(); /如为true,支持序列化,这里myBool=true bool myBool=myType.IsSerializable; 【例6.1】下边的

12、例子完成了一个哈希表对象的序列化。,using System; using System.IO; /使用泛型集合类引用的命名空间 using System.Collections.Generic; /使用序列化引用的命名空间 using System.Runtime.Serialization.Formatters.Binary; /使用序列化引用的命名空间 using System.Runtime.Serialization; class SerialFile static void Main() Dictionary h= /建立哈希表对象 new Dictionary(); h.Add(

13、“键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(“d:/d.dat“,

14、FileMode.Open); h.Clear(); h = (Dictionary) formatter.Deserialize(fs); fs.Close();/下句显示反序列化数据 foreach (KeyValuePair h1 in h) Console.WriteLine(“0:1;“, h1.Key, h1.Value); /注意哈希表用法 ,自己定义的类也可以序列化,只要在类定义前增加Serializable即可,书中例子首先定义了一个可序列化的类Person,建立若干Person类对象,存到List类对象中,并将List类对象序列化。,6.1.5 Stream类的其他派生类,

15、Stream类的其他派生类包括:MemoryStream、BuffereStream、NetworkStream(在System.Net.Sockets命名空间)。其中MemoryStream类把文件放到内存中,极大地提高了文件读写速度,例子见8.5节和13.5.5节。BuffereStream类为文件读写建立一个缓冲区,写文件先把文件存到缓冲区中,缓冲区满了以后,才写入物理设备。先从文件读入较多数据到缓冲区,读文件先从缓冲区读,缓冲区没有所需数据,才再一次从物理设备读数据到缓冲区,用这样的方法改善文件读写的性能。NetworkStream类把网络传输的数据也看作流。请用帮助查看这些类的用法。

16、,6.2 File类和FileInfo类,C#语言中通过File和FileInfo类来创建、复制、删除、移动和打开文件。在File类中提供了一些静态方法,使用这些方法可以完成上述功能,但File类不能建立对象。FileInfo类使用方法和File类基本相同,但FileInfo类能建立对象。在使用这两个类时需要引用System.IO命名空间。这里重点介绍File类的使用方法。 6.2.1 File类常用的方法 见书,6.2.1 判断文件是否存在,判断文件是否存在的方法声明如下:public static bool Exists(string path);该方法判断参数指定的文件是否存在,参数path指定文件路径。如果文件存在,返回true,如果

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

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

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