《第11章文件操作和输入输出流PPT讲稿.ppt》由会员分享,可在线阅读,更多相关《第11章文件操作和输入输出流PPT讲稿.ppt(17页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第11章文件操作和输入输出流第1页,共17页,编辑于2022年,星期日目标qIO框架结构q对目录和文件的创建、读、写和更新操作qFile和Directory静态类的使用qFileInfo和DirectoryInfo的实例对象的应用q字节流和字符流的处理q目录管理q文件管理第2页,共17页,编辑于2022年,星期日体验 程序运行后,在c盘下生成一个text.txt文件。程序向该文件中输入10000行的记录。记录输入完成后,程序把文件的所有记录显示在控制台上。第3页,共17页,编辑于2022年,星期日文件和流q文件文件 文件是一些具有永久存储及特定顺序的字节组成的一个有序的、文件是一些具有永久存储
2、及特定顺序的字节组成的一个有序的、具有名称的集合。具有名称的集合。在各种介质上(可移动磁盘、硬盘、在各种介质上(可移动磁盘、硬盘、CD CD 等)存储的集合数据。等)存储的集合数据。通常情况下文件按照树状目录进行组织,每个文件都有文件名、通常情况下文件按照树状目录进行组织,每个文件都有文件名、文件所在路径、创建时间、访问权限等属性。文件所在路径、创建时间、访问权限等属性。qq流流流提供了连续的字节流存储空间,虽然数据实际存储的位置流提供了连续的字节流存储空间,虽然数据实际存储的位置可能不连续,甚至可以分布在多个磁盘上,但我们看到的是可能不连续,甚至可以分布在多个磁盘上,但我们看到的是封装以后的
3、数据结构,是连续的字节流抽象结构。封装以后的数据结构,是连续的字节流抽象结构。除了和磁盘文件直接相关的文件流以外,流有多种类型,流可以除了和磁盘文件直接相关的文件流以外,流有多种类型,流可以分布在网络中,内存中或者是磁带中。分布在网络中,内存中或者是磁带中。第4页,共17页,编辑于2022年,星期日IO 命名空间和它类qIO 命名空间包含便于在数据流和文件中读取和写入数据的类qIO 命名空间中用于文件目录操作类第5页,共17页,编辑于2022年,星期日类类 名名说说 明明File提供用于创建、复制、删除、移动和打开文件的静态方法,并协助创建 FileStream。FileInfo 类提供实例方
4、法。Directory提供通过目录和子目录进行创建、移动和枚举的静态方法。DirectoryInfo类提供实例方法FileInfo提供用于创建、复制、删除、移动和打开文件的实例方法,并协助创建 FileStream。File 类提供静态方法。DirectoryInfo提供通过目录和子目录进行创建、移动和枚举的实例方法。Directory 类提供静态方法。FileSystemInfoFileInfo和DirectoryInfo的抽象基类。Path提供以跨平台的方式处理目录字符串的方法和属性。DriveInfo提供访问有关驱动器的信息的实例方法。FileStream支持通过其Seek方法随机访问文
5、件。默认情况下,FileStream 以同步方式打开文件,但它也支持异步操作。File 包含静态方法,而FileInfo包含实例方法。DeflateStream提供使用Deflate算法压缩和解压缩流的方法和属性。GZipStream提供压缩和解压缩流的方法和属性。默认情况下,此类使用与DeflateStream 类相同的算法,但可以扩展到使用其他压缩格式。第6页,共17页,编辑于2022年,星期日流I/O操作类类类 名名说说 明明BinaryReader从Streams读取编码的字符串和基元数据类型。BinaryWriter或向Streams写入编码的字符串和基元数据类型。StreamRea
6、der通过使用Encoding进行字符和字节的转换,从Streams中读取字符。StreamReader具有一个构造函数,该构造函数根据是否存在专用于Encoding的preamble(例如一个字节顺序标记)来确定给定Stream的正确Encoding是什么。StreamWriter通过使用Encoding将字符转换为字节,向Streams写入字符。StringReader从Strings中读取字符。StringReader允许您用相同的API来处理Strings,因此您的输出可以是String或以任何编码表示的Stream。StringWriter向Strings写入字符。StringWri
7、ter允许您用相同的API来处理Strings,因此您的输出可以是String或以任何编码表示的Stream。TextReaderStreamReader和StringReader的抽象基类。抽象Stream类的实现用于字节输入和输出,而TextReader的实现用于Unicode字符输出。TextWriterStreamWriter和StringWriter的抽象基类。抽象Stream类的实现用于字节输入和输出,而TextWriter的实现用于Unicode字符输出。第7页,共17页,编辑于2022年,星期日其他I/O流类类类 名名说说 明明BufferedStream向另一个 Stream
8、(例如 NetworkStream)添加缓冲的 Stream。(FileStream内部已具有缓冲,MemoryStream 不需要缓冲。)BufferedStream 可以围绕某些类型的流来构成以提高读写性能。缓区是内存中的字节块,用于缓存数据,从而减少对操作系统的调用次数。MemoryStream一个非缓冲的流,可以在内存中直接访问它的封装数据。该流没有后备存储,可用作临时缓冲区。NetworkStream表示网络连接上的 Stream。虽然 NetworkStream 是从 Stream 派生的,但它不属于 System.IO 命名空间,而是在 System.NET.Sockets 命名
9、空间中。第8页,共17页,编辑于2022年,星期日目录管理SystemSystem.IOIO命名空间下提供了三种操作目录的类:命名空间下提供了三种操作目录的类:Directory Directory 静态类提供通过目录和子目录进行创建、移动和删除等静态类提供通过目录和子目录进行创建、移动和删除等静态方法。静态方法。DirectoryInfo DirectoryInfo 提供通过目录和子目录进行创建、移动和删除等提供通过目录和子目录进行创建、移动和删除等实例方法。实例方法。Path Path 静态类的成员使您可以快速方便地对文件或目录路径信息的静态类的成员使您可以快速方便地对文件或目录路径信息的
10、StringString实例,执行常见静态操作方法。例如:确定文件扩展名是否是实例,执行常见静态操作方法。例如:确定文件扩展名是否是路径的一部分,以及将两个字符串组合成一个路径名。路径的一部分,以及将两个字符串组合成一个路径名。示例参见教材例示例参见教材例10.110.1、10.210.2 PathPath示例参见教材例示例参见教材例10.310.3第9页,共17页,编辑于2022年,星期日 string path=c:MyDir;string path=c:MyDir;string target=c:TestDir;string target=c:TestDir;try try if(Dir
11、ectory.Exists(target)if(Directory.Exists(target)Directory.Delete(target,true);Directory.Delete(target,true);Console.WriteLine(Path:0 is deleted.,path);Console.WriteLine(Path:0 is deleted.,path);if(!Directory.Exists(path)if(!Directory.Exists(path)Directory.CreateDirectory(path);Directory.CreateDirect
12、ory(path);Console.WriteLine(Path:0 is created now.,path);Console.WriteLine(Path:0 is created now.,path);else else Console.WriteLine(Path:0 is exist.,path);Console.WriteLine(Path:0 is exist.,path);Directory.Move(path,target);Directory.Move(path,target);Directory.CreateDirectory(target+subdir);Directo
13、ry.CreateDirectory(target+subdir);File.CreateText(target+myfile.txt);File.CreateText(target+myfile.txt);Console.WriteLine(The number of files in 0 is 1,Console.WriteLine(The number of files in 0 is 1,target,Directory.GetFiles(target).Length);target,Directory.GetFiles(target).Length);catch(Exception
14、e)catch(Exception e)Console.WriteLine(The process failed:0,e.ToString();Console.WriteLine(The process failed:0,e.ToString();finally finally 第10页,共17页,编辑于2022年,星期日递归算法如何获得某个盘符或者路径下的所有目录和子目录的信息呢?循环?递归 能采用递归描述的算法通常有这样的特征:能采用递归描述的算法通常有这样的特征:为求解规模为N的问题,设法将它分解成规模较小的问题,然后从这些小问题的解方便地构造出大问题的解,并且这些规模较小的问题也能采用
15、同样的分解和综合方法,分解成规模更小的问题,并从这些更小问题的解构造出规模较大问题的解。特别地,当规模N=1时,能直接得解。第11页,共17页,编辑于2022年,星期日递归示例using System;using System;using Systemusing System.IO;IO;public class Filespublic class Files/将将string string 改变为改变为DirectoryInfoDirectoryInfo public static void dispDirs(DirectoryInfo public static void dispDirs
16、(DirectoryInfo dir)dir)Console Console.WriteLine(0,WriteLine(0,dirdir.FullName);FullName);/返回目录中的目录列表对象返回目录中的目录列表对象 DirectoryInfo directories=DirectoryInfo directories=dirdir.GetDirectories();GetDirectories();foreach(DirectoryInfo dirX in foreach(DirectoryInfo dirX in directories)directories)dispDir
17、s(dirX);dispDirs(dirX);public static void Main()/保存目录存在 DirectoryInfo dir=new DirectoryInfo(D:TOOLS);if(dir.Exists)dispDirs(dir);else Console.WriteLine(访问目录不存在!);Console.Read();第12页,共17页,编辑于2022年,星期日文件管理qFile类通常和FileStream类协作来完成对文件的创建、删除、拷贝、移动、打开等操作。qFile类提供的静态方法主要有Create、Copy、Move、Delete、GetLastAcc
18、essTime 等,利用它们可以完成一些基本的文件管理。q也可以通过FileInfo类来实现同样的操作。q示例参照教材例10.5、10.6第13页,共17页,编辑于2022年,星期日文本模式文件数据读写文本模式文件数据读写 qStreamReader和StreamWriter类提供以一种特定的编码从字节流中读取字符。注意字符编码问题 示例参见教材例10.7第14页,共17页,编辑于2022年,星期日文件流获得通过File类中的Open、OpenRead、OpenWrite获得FileStream文件流。通过AppendText可获得UTF-8编码格式的StreamReader类对象。第15页,
19、共17页,编辑于2022年,星期日二进制模式文件数据读写二进制模式文件数据读写 qqBinaryReader BinaryReader 和和BinaryWriter BinaryWriter 类,用于按二进制模式读写文件。类,用于按二进制模式读写文件。qq它们提供的一些读写方法是对称的,比如针对不同的数据结构,它们提供的一些读写方法是对称的,比如针对不同的数据结构,BinaryReaderBinaryReader提供了提供了ReadByteReadByte、ReadBooleanReadBoolean、ReadIntReadInt、ReadInt16ReadInt16、ReadDoubleRe
20、adDouble、ReadStringReadString等方法,而等方法,而BinaryWriter BinaryWriter 则则提供了重载了提供了重载了1717次的次的Write Write 方法。方法。qBinaryReaderBinaryReader读取数据所用方法必须和读取数据所用方法必须和BinaryWriterBinaryWriter写入数据写入数据所用方法对应。所用方法对应。qq示例参见教材例示例参见教材例 10.810.8第16页,共17页,编辑于2022年,星期日总结qIO框架结构q对目录和文件的创建、读、写和更新操作qFile和Directory静态类的使用qFileInfo和DirectoryInfo的实例对象的应用q字节流和字符流的处理q目录管理q文件管理第17页,共17页,编辑于2022年,星期日