C#程序设计基础 教学课件 ppt 作者 杨棉绒 李栋 张鑫 第9章 文件操作

上传人:E**** 文档编号:89423690 上传时间:2019-05-25 格式:PPT 页数:42 大小:196.50KB
返回 下载 相关 举报
C#程序设计基础 教学课件 ppt 作者 杨棉绒 李栋 张鑫 第9章 文件操作_第1页
第1页 / 共42页
C#程序设计基础 教学课件 ppt 作者 杨棉绒 李栋 张鑫 第9章 文件操作_第2页
第2页 / 共42页
C#程序设计基础 教学课件 ppt 作者 杨棉绒 李栋 张鑫 第9章 文件操作_第3页
第3页 / 共42页
C#程序设计基础 教学课件 ppt 作者 杨棉绒 李栋 张鑫 第9章 文件操作_第4页
第4页 / 共42页
C#程序设计基础 教学课件 ppt 作者 杨棉绒 李栋 张鑫 第9章 文件操作_第5页
第5页 / 共42页
点击查看更多>>
资源描述

《C#程序设计基础 教学课件 ppt 作者 杨棉绒 李栋 张鑫 第9章 文件操作》由会员分享,可在线阅读,更多相关《C#程序设计基础 教学课件 ppt 作者 杨棉绒 李栋 张鑫 第9章 文件操作(42页珍藏版)》请在金锄头文库上搜索。

1、第9章 文件操作,9.1 基本概念 9.2 文件和目录 9.3 文件的读写,9.1 基本概念,9.1.1 认识C#的文件处理系统 9.1.2文件和流,9.1.1 认识C#的文件处理系统,目前的计算机系统中存在许多不同的文件系统。在广大计算机用户非常熟悉的DOS、Windows 3.X、Windows 98、Windows NT、Windows 2000等操作系统中,使用到了FAT、FAT32、NTFS 等文件系统,这些文件系统在操作系统内部实现时有不同的方式。但是,它们提供给用户的接口是一致的。因此,在编写有关文件操作的代码时,用户不需要考虑文件的具体实现方式,只需要利用语言环境提供的外部接口

2、就可以顺利进行各种有关操作。,同样,在C#语言中进行文件操作时,用户也不需要关心文件的具体存储格式。只要利用编程环境封装好的对文件进行操作的统一外部接口,就可以保证程序在不同的文件系统上进行良好的移植。,9.1.2文件和流,文件(File)和流(Stream)是既有区别又有联系的两个概念。文件是指在各种存储介质上(例如可移动磁盘,硬盘,CD等)永久存储的数据的有序集合,它是进行数据读写操作的基本对象。通常情况下文件按照树状目录结构进行组织,每个文件都有文件名、文件所在路径、创建时间、访问权限等属性。,流是字节序列的抽象概念,例如文件、输入/输出设备、内部进程通信管道或者TCP/IP套接字。流提

3、供一种向后备存储器写入字节和从后备存储器读取字节的方式。除了和磁盘文件直接相关的文件流以外,流还有很多类型。流可以分布在网络中、内存中或者磁带中,分别称为网络流,内存流和磁带流等。,流的三种基本操作:,()读取:从流到数据结构(如字节数组)的数据传输。 ()写入:从数据结构到流的数据传输。 ()查找:对流内的当前位置进行查询和修改。,9.2 文件和目录,9.2.1 目录操作 9.2.2 文件操作,9.2.1 目录操作,Directory类提供了创建、移动和查找目录的许多静态方法。因此Directory类无需创建实例对象即可调用。,DirectoryInfo类的所有方法都是实例方法。也就是说,要

4、想使用DirectoryInfo类所提供的方法就必须实例化一个属于DirectoryInfo类的对象。由此可以看出如果我们相对同一个目录进行多次重复操作的时候,我们应该考虑使用DirectoryInfo类的实例方法,而不是Directory类的静态方法。,【例9-2】假定在计算机C: 盘根目录下有一个名称为d1的目录,在该目录中还有d11和d12两个子目录,在d11目录中也有两个子目录分别为d111和d112。编写程序,遍历目录d1目录下的所有子目录并将其所有子目录名输出在控制台上。,using System; using System.Collections.Generic; using S

5、ystem.Text; using System.IO; namespace t8_2 class Program ,public static void dirlist(DirectoryInfo d) Console.WriteLine(d.FullName); DirectoryInfo dis = d.GetDirectories(); foreach (DirectoryInfo di in dis) dirlist(di); /递归调用函数本身,从而遍历整个目录下所有子目录。 static void Main(string args) string filePath = “C:d1

6、“;,DirectoryInfo d = new DirectoryInfo(filePath); dirlist(d); Console.ReadKey(); ,运行结果,9.2.2 文件操作,C#编程环境中对磁盘文件进行创建、移动、复制、删除、打开等操作是借助于File类与FileStream类协同完成的。与Directory类相似的是,File的方法都是静态方法。因此无需创建实例对象即可调用File类的方法。,【例9-3】假定在计算机C: 盘根目录下有一个名称为d8_3的目录,并且c: 盘根目录下有一个名叫a.txt的文本文件。编写程序将c:a.txt文件复制到c:d8_3目录。复制时要

7、对目标位置上是否已经存在有一个名叫a.txt的文件进行检测,如果已经有a.txt文件就把该文件的FileAttributes属性设置为普通读写模式,然后将该文件删除,接着再把源位置上的a.txt文件复制到目标位置。最后再把新复制过来的文件的FileAttributes属性只读并且隐藏。,static void Main(string args) if (File.Exists(“c:d8_3a.txt“) File.SetAttributes(“c:d8_3a.txt“, FileAttributes.Normal); File.Delete(“c:d8_3a.txt“); File.Copy

8、(“c:a.txt“, “c:d8_3a.txt“); else File.Copy(“c:a.txt“, “c:d8_3a.txt“); ,File.SetAttributes(“c:d8_3a.txt“, FileAttributes.ReadOnly | FileAttributes.Hidden); Console.WriteLine(“文件复制完毕!“); ,关于文件的创建和打开这两布操作需要和文件流对象配合使用,所以上面实例中没有使用,关于这些方法的使用会在下一节的实例中讲述。接下来我们再通过一个例子认识FileInfo类的相关内容。,【例9-4】假定在计算机C: 盘根目录下有一个

9、名称为d8_4的目录,并且该目录中有若干个文件。编写程序使用FileInfo的GetFiles()方法得到目录下的所有文件句柄,然后用Delete()方法来删除该目录下的所有文件(包括文件的属性是只读、隐藏和系统文件。该程序有一定的危险性,删除前要确认目录中的文件是否有用,请谨慎使用不要随便修改程序中的目录名称,以免对计算机软件系统造成损伤)。,static void Main(string args) Console.WriteLine(“你确定删除当前目录下的所有文件吗?“); Console.WriteLine(“按y或者Y确定,其他键取消。“); System.ConsoleKey a

10、 = Console.ReadKey().Key; if (a = ConsoleKey.Y) Console.WriteLine(“n正在删除文件.“); DirectoryInfo d = new DirectoryInfo(“c:d8_4“); FileInfo flist = d.GetFiles(); foreach (FileInfo f in flist) /无论文件原来的属性是什么都将文件设置为可读写属性, /以便可以正常删除,File.SetAttributes(f.FullName, FileAttributes.Normal); f.Delete(); /删除文件 els

11、e Console.WriteLine(“n你取消了操作!“); Console.WriteLine(“执行完毕,按任意键退出.“); Console.ReadKey(); ,运行结果,9.3 文件的读写,9.3.1 文本模式读写文件 9.3.2 二进制模式读写文件,9.3.1 文本模式读写文件,在 .NET环境中StreamReader类和StreamWriter类为我们提供了按照文本模式读写文件的方法。,【例9-5】编写程序使用StreamWriter类,把数据写到文本文件中去。,class Program static void Main(string args) StreamWrite

12、r sw; /声明文本流对象。 sw = File.CreateText(“c:file.txt“); /创建文本文件,并且打开文本流对象。,/下面4句,是向文本流中写入内容。 sw.Write(“文本方式读写文件,“); sw.Write(“使用Write方法不换行。“); sw.WriteLine(); sw.WriteLine(“想换行,请使用WriteLine方法。“); sw.Flush(); /把文本流中的内容全部写入基础流(文本文件)。 sw.Close(); /关闭文件流并且释放和本次文件流相关的所有资源。 ,程序执行后可以在c:盘根目录上找到文件file.txt。打开该文件,

13、其内容如下: 文本方式读写文件,使用Write方法不换行。 想换行,请使用WriteLine方法。,【例9-6】编写程序使用StreamReader类,把例题9-5中程序所产生的文本文件中的数据内容读出。,static void Main(string args) StreamReader sr; sr = File.OpenText(“c:file.txt“); /打开文本文件,将其和文本流对象关联 while (sr.Peek() != -1) /代表当文本流还没有到流尾 string tempS = sr.ReadLine(); Console.WriteLine(tempS); sr.

14、Close(); Console.ReadKey(); ,运行结果,9.3.2 二进制模式读写文件,System.IO命名空间提供了BinaryReader类和BinaryWriter类,用来完成读写二进制数据的操作,但是这两个类本身并不执行流,而是提供其他对象流的包装。因此建立BinaryReader类和BinaryWriter类的对象时需要为它们提供一个FileStream文件流对象。,【例9-7】编写程序,创建一个二进制文件,并使用BinaryWriter类对该文件进行二进制数据写入操作。,static void Main(string args) Console.WriteLine(“

15、请输入文件名:“); string filename = Console.ReadLine(); /获取输入文件名 FileStream fs; /声明FileStream对象,try fs = new FileStream(filename, FileMode.Create); /初始化FileStream对象 BinaryWriter bw = new BinaryWriter(fs); /创建BinaryWriter对象 /写入文件 bw.Write(a); bw.Write(123); bw.Write(456.789); bw.Write(“Hello World!“); Conso

16、le.WriteLine(“成功写入“); bw.Close(); /关闭BinaryWriter对象 fs.Close(); /关闭文件流 catch (IOException ex) Console.WriteLine(ex.Message); ,运行结果,如上面运行结果所示,程序运行后按照用户输入的文件名在c:盘根目录上建立了一个名为a.dat的二进制文件,并向该文件中分别写入了字符、数值、字符串等信息。,【例9-8】编写程序,将例题9-7所建立的二进制文件的内容用BinaryReader读取出来,并且在屏幕上输出。,class Program static void Main(string args) st

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

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

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