欢迎来到三一文库! | 帮助中心 三一文库31doc.com 一个上传文档投稿赚钱的网站
三一文库
全部分类
  • 研究报告>
  • 工作总结>
  • 合同范本>
  • 心得体会>
  • 工作报告>
  • 党团相关>
  • 幼儿/小学教育>
  • 高等教育>
  • 经济/贸易/财会>
  • 建筑/环境>
  • 金融/证券>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 三一文库 > 资源分类 > PPT文档下载
     

    第6章文件和流.ppt

    • 资源ID:3129920       资源大小:235.02KB        全文页数:37页
    • 资源格式: PPT        下载积分:6
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录   微博登录  
    二维码
    微信扫一扫登录
    下载资源需要6
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    第6章文件和流.ppt

    第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类以字符或字符串为单位读写文件。本节首先介绍这些类的用法,然后介绍数据的序列化。使用流读写文件必须引入命名空间: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; /建立字节数组 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 ReadFile 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; /使用文件必须引入的命名空间 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 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(int 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+) datai=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.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=“; /建立元素为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(“0“,m); ,6.1.4 序列化,对于一个复杂的数据结构,例如数组,用以上方法存入文件,就显得过于复杂了。为了简化这类问题,C#提出了序列化的概念,序列化包括序列化和反序列化,所谓序列化就是把类的对象作为一个整体存入文件,反序列化则是相反的过程。C#中的许多类都支持序列化,可以用如下方法判别一个类是否支持序列化: Dictionary h =/建立泛型哈希表对象 new Dictionary(); Type myType=h.GetType(); /如为true,支持序列化,这里myBool=true bool myBool=myType.IsSerializable; 【例6.1】下边的例子完成了一个哈希表对象的序列化。,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(“键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“, 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类的其他派生类,Stream类的其他派生类包括:MemoryStream、BuffereStream、NetworkStream(在System.Net.Sockets命名空间)。其中MemoryStream类把文件放到内存中,极大地提高了文件读写速度,例子见8.5节和13.5.5节。BuffereStream类为文件读写建立一个缓冲区,写文件先把文件存到缓冲区中,缓冲区满了以后,才写入物理设备。先从文件读入较多数据到缓冲区,读文件先从缓冲区读,缓冲区没有所需数据,才再一次从物理设备读数据到缓冲区,用这样的方法改善文件读写的性能。NetworkStream类把网络传输的数据也看作流。请用帮助查看这些类的用法。,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,如果文件不存在,或者访问者不具有访问此文件的权限,或者path描述一个目录,返回false。下面的代码段判断是否存在c:Examplee1.txt文件: if(File.Exists(“c:Examplee1.txt“) /为处理代码,6.2.3 删除文件,删除文件方法:public static void Delete(string path);该方法删除参数指定的文件,参数path指定要删除的文件的路径。下面的程序删除用户指定文件。 using System; using System.IO; class DeleteFile static void Main() Console.WriteLine(“请键入要删除的文件的路径:“); string path=Console.ReadLine();/从键盘读入路径,输入回车结束 if(File.Exists(path)/表示其后字符串不包括转义字符 File.Delete(path); else Console.WriteLine(“文件不存在!“); ,6.2.4 复制文件,复制文件方法:public static void Copy(string sFName,string dFName,bool overW); 该方法将参数sFName指定文件拷贝到参数destFileName指定的目录,修改文件名为参数dFName指定的文件名,如果OverW为true,而且文件名为dFName的文件已存在的话,将会被复制过去的文件所覆盖。文件复制例子如下: using System; using System.IO; class CopyFile static void Main() Console.WriteLine (“请键入要拷贝的源文件的路径:“);,/从键盘读入路径,输入回车结束 string path=Console.ReadLine(); Console.WriteLine (“请键入要拷贝的目的文件的路径(包括文件名):”); /从键盘读入路径,输入回车结束 string path1=Console.ReadLine(); if(File.Exists(path) /表示其后字符串不包括转义字符 if(!File.Exists(path1)/如果不存在目的文件,拷贝 File.Copy(path,path1,true); else Console.WriteLine(“目的文件存在或目的路径非法!“); else Console.WriteLine(“源文件不存在!“); ,6.2.5 移动文件,移动文件方法:public static void Move(string sFName,string dFName);该方法将参数sFName指定文件移动到参数dFName指定的目录,修改文件名为参数dFName指定的文件名,如果目标文件已经存在,或者路径格式不对,将引发异常。注意,只能在同一个逻辑盘下进行文件转移。如果试图将c盘下的文件转移到d盘,将发生错误。下面的代码可以将c:Example下的e1.txt文件移动到c盘根目录下。 File.Move(“c:ExampleBackUp.txt“,“c:BackUp.txt“); FileInfo类方法MoveTo可以将一个逻辑盘的文件移到另一个逻辑盘,例子如下: using System; using System.IO; class MoveFile static void Main() Console.WriteLine(“请键入要移动的源文件的路径:“);,string path=Console.ReadLine();/从键盘读入路径,输入回车结束 Console.WriteLine (“请键入要移动的目的文件的路径(包括文件名):“); string path1=Console.ReadLine();/从键盘读入路径,输入回车结束 if(File.Exists(path) /表示其后字符串不包括转义字符 if(!File.Exists(path1) FileInfo fi=new FileInfo(path);/使用FileInfo必须建立对象 fi.MoveTo(path1);/fi所代表的文件移到path1指定的位置 /File.Move(path,path1);/如在同一磁盘可使用此句替换前2句 else Console.WriteLine(“目的文件存在或路径非法!“); else Console.WriteLine(“源文件不存在!“); ,6.2.6 设置文件属性,设置文件属性方法:public static void SetAttributes(string path,FileAttributes fileAbs);参数path指定要修改属性的文件路径;参数fileAbs指定要修改的文件属性,可以是如下数值:Archive(存档)、Compressed(压缩文件)、Directory(目录文件)、Encrypted(加密)、Hidden(隐藏)、Normal(普通文件)、ReadOnly(只读文件)、System(系统文件)、Temporary(临时文件)。下面代码设置文件c:e1.txt的属性为只读、隐藏。 File.SetAttributes(“c:e1.txt“,FileAttributes.ReadOnly|FileAttributes.Hidden);,6.2.7 得到文件的属性,方法声明如下:public static FileAttributes GetAttributes(string path);方法返回参数指定的文件的FileAttributes,如果未找到路径或文件,返回-1,例子如下: using System; using System.IO; class GetFileAttributes static void Main() Console.WriteLine(“请键入要得到属性的文件路径:”); /从键盘读入路径,输入回车结束 string path=Console.ReadLine(); if(File.Exists(path) /表示其后字符串不包括转义字符 FileAttributes attributes= File.GetAttributes(path);,if(attributes ,6.3 Directory类和DirectoryInfo类,C#语言中通过Directory类来创建、复制、删除、移动文件夹。在Directory类中提供了一些静态方法,使用这些方法可以完成上述功能。Directory类不能建立对象。DirectoryInfo类使用方法和Directory类基本相同,但DirectoryInfo类能建立对象。在使用这两个类时需要引用System.IO命名空间。这里重点介绍Directory类的使用方法。 6.3.1 Directory类常用的方法 见书,6.3.2 判断目录是否存在,方法声明如下:public static bool Exists(string path);该方法判断参数指定目录是否存在,参数path指定目录的路径。如果目录存在,返回true,如果目录不存在,或者访问者不具有访问此目录权限,返回false。下面代码判断是否存在c:Dir1Dir2目录。 if(Directory.Exists(“c:Dir1Dir2“) /为处理代码,6.3.3 创建目录,using System; using System.IO; class CreateFileDirectory static void Main() Console.WriteLine(“请键入要创建的目录路径:”); /从键盘读入路径,输入回车结束 string path=Console.ReadLine(); if(!Directory.Exists(path) Directory.CreateDirectory(path); else Console.WriteLine(“目录已存在或目录非法!”); ,6.3.4 删除目录,using System; using System.IO; /使用文件必须引入的命名空间 class DeleteFile static void Main() Console.WriteLine(“请键入要删除的目录的路径:“); string path=Console.ReadLine();/从键盘读入路径回车结束 if(Directory.Exists(path) Directory.Delete(path); else Console.WriteLine(“目录不存在或目录非法!”); ,6.3.5 移动目录,移动目录方法:public static void Move(string sourceDirName,string destDirName);该方法将文件或目录及其子目录移到新位置,如果目标目录已经存在,或者路径格式不对,将引发异常。注意,只能在同一个逻辑盘下进行目录转移。如果试图将c盘下的目录转移到d盘,将发生错误。下面的代码可以将目录c:Dir1Dir2移动到c:Dir3Dir4。 Directory.Move(“c:Dir1Dir2“,“c:Dir3Dir4“); Directory Info类方法MoveTo可以将一个逻辑盘的目录移到另一个逻辑盘,例子如下: using System; using System.IO; class DeleteFile static void Main() Console.WriteLine(“请键入要移动的源目录的路径:“); string path=Console.ReadLine();,Console.WriteLine(“请键入要移动的目的目录的路径:“); string path1=Console.ReadLine(); if(Directory.Exists(path) if(!Directory.Exists(path1) DirectoryInfo dir=new DirectoryInfo(path); dir.MoveTo(path1); /Directory.Move(path,path1); /如两个目录在同一磁盘中,可用被注解的语句替换前2句 else Console.WriteLine(“目的目录已存在!“); else Console.WriteLine(“源目录不存在!“); ,6.3.6 获取当前目录下所有子目录,using System; using System.IO; /使用文件必须引入的命名空间 class DeleteFile static void Main() Console.WriteLine(“请键入目录的路径:”);/例如键入:d:/ string path=Console.ReadLine(); if(Directory.Exists(path) string Directorys; Directorys=Directory.GetDirectories(path); foreach(string aDir in Directorys) Console.WriteLine(aDir); else Console.WriteLine(“目录不存在!“); ,6.3.7 获取当前目录下的所有文件,using System; using System.IO; class DeleteFile static void Main() Console.WriteLine(“请键入目录的路径:“); string path=Console.ReadLine(); if(Directory.Exists(path) string files; files=Directory.GetFiles(path); foreach(string aFile in files) Console.WriteLine(aFile); else Console.WriteLine(“目录不存在!“); ,6.3.8 设置目录属性,与文件属性相同,目录属性也是使用FileAttributes来进行设置的。下面的代码设置c:Dir1Dir2目录为只读、隐藏。 DirectoryInfo DirInfo= new DirectoryInfo(“c:Dir1Dir2“); DirInfo.Atttributes= FileAttributes.ReadOnly|FileAttributes.Hidden;,

    注意事项

    本文(第6章文件和流.ppt)为本站会员(本田雅阁)主动上传,三一文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    经营许可证编号:宁ICP备18001539号-1

    三一文库
    收起
    展开