您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > 项目一子任务四(下)
项目一:抽奖程序子任务四:C#泛型、文件应用——抽奖程序(下)项目背景知识:第4章抽奖程序任务4.6学习文件操作文件操作是一个操作系统重要的组成部分之一,也是一个应用程序所必须具备的功能。一个完整的应用程序,必须具有系统和用户信息交换的功能。而有效的文件操作,是实现信息交换的手段之一。C#提供了强大的文件操作的功能。使用这些功能,可以很方便的实现文件的存储管理、对文件的读写等操作。常见的对文件进行操作的方式有两种,文本模式与二进制模式。文件和文件夹文件与前文介绍的数组等变量不同。变量中的数据只是在程序运行时存在,随着程序的终结变量的内容也随之丢失。而文件中的内容可以永久的存储数据到硬盘或其他设备上,这就是通常所说的持久性数据。文件的这种特性可以使我们方便的存储应用程序配置等数据,以方便在程序下一次运行时使用。.NET对文件的操作提供了方便的工具。本章的代码实例中如无特殊说明,将会包含以下引用:usingSystem;usingSystem.IOSystem.IO命名空间概述System.IO命名空间中包含了文件、目录、路径和流等操作相关的所有类。流与文件是既相关又有区别的两个概念。文件是一些具有永久存储及特定顺序的字节组成的一个有序的、具有名称的集合。相反,流提供一种向后备存储写入字节和从后备存储读取字节的方式,后备存储包括软盘、硬盘、内存、网络等。与读写文件对应的流称为文件流,除此之外也存在多种流,例如:网络流、内存流和磁带流等。4.6.1File类(P61-62)File类是文件操作中最重要和最基础的一个类。这个类里提供了大量的公开方法,有42种之多,其中大部分方法为静态方法。File类提供了用于创建、复制、删除、移动和打开文件的静态方法,并协助创建FileStream对象。方法说明Copy将现有文件复制到新文件。Create在指定路径中创建文件。Delete删除指定的文件。如果指定的文件不存在,则不引发异常。Exists确定指定的文件是否存在。Move将指定文件移到新位置,并提供指定新文件名的选项。Open打开指定路径上的FileStream。文件夹类Directory(补充)方法说明CreateDirectory创建指定路径中的所有目录。Delete删除指定的目录。Exists确定给定路径是否引用磁盘上的现有目录。GetCurrentDirectory获取应用程序的当前工作目录。GetDirectories获取指定目录中子目录的名称。GetFiles返回指定目录中的文件的名称。GetLogicalDrives检索此计算机上格式为“驱动器号:\”的逻辑驱动器的名称。GetParent检索指定路径的父目录,包括绝对路径和相对路径。Move将文件或目录及其内容移到新位置。读者对Windows的文件管理方式应该并不陌生,其采用的是一种树形管理模式,文件的上层通常还存在若干层文件夹。Directory类用于创建、复制、移动、重命名和删除目录。文件信息类FileInfo(补充)属性说明Attributes获取或设置当前FileSystemInfo的FileAttributes。CreationTime获取或设置当前FileSystemInfo对象的创建时间。Directory获取父目录的实例。DirectoryName获取表示目录的完整路径的字符串。Exists获取指示文件是否存在的值。Extension获取表示文件扩展名部分的字符串。FullName获取目录或文件的完整目录。IsReadOnly获取或设置确定当前文件是否为只读的值。Length获取当前文件的大小。Name获取文件名。文件信息类FileInfo与File类不同。它虽然也提供了创建、复制、删除、移动和打开文件的方法,并且帮助创建FileStream对象,但是它提供得仅仅是实例方法。因此要使用FileInfo类,必须先实例化一个FileInfo对象。FileInfo和File类(补充)后者只包含静态方法,无须实例化。方法对比:判断文件是否存在:Exists属性(前者)和Exists方法(后者)创建文件:Creat方法删除文件:Delete方法复制文件:CopyTo方法(前者)和Copy方法(后者)移动文件:MoveTo方法(前者)和Move方法(后者)文件夹信息类DirectoryInfo(补充)文件夹信息类DirectoryInfo与文件信息类FileInfo相似。它是一个实例类,同样提供了Directory类中的大部分方法。同FileInfo类一样,使用DirectoryInfo类之前必须实例化一个DirectoryInfo对象。属性说明Attributes获取或设置当前FileSystemInfo的FileAttributes。CreationTime获取或设置当前FileSystemInfo对象的创建时间。Exists获取指示目录是否存在的值。Extension获取表示文件扩展名部分的字符串。Name获取此DirectoryInfo实例的名称。Parent获取指定子目录的父目录。Root获取路径的根部分。DirectoryInfo和Directory类(补充)后者只包含静态方法,无须实例化。方法对比:判断文件是否存在:Exists属性(前者)和Exists方法(后者)创建文件夹:Create(前者)方法和CreateDirectory方法(后者)删除文件夹:Delete方法移动文件夹:MoveTo方法(前者)和Move方法(后者)注意:上述方法要求源目录与目标目录处于同一根目录下,且两者不能相同。此外,目标目录不能是已存在目录。文件信息类与文件夹信息类的用法(补充)文件信息类FileInfo和文件夹信息类DirectoryInfo具有文件类File和文件夹类Directory的大部分功能。读者在实际应用中应当注意选择使用不同的实现。File类和Directory类适合用于在对象上单一的方法调用。此种情况下静态方法的调用在速度上效率比较高,因为此种方法省去了实例化新对象的过程。FileInfo类和DirectoryInfo类适合用于对同一文件或文件夹进行几种操作的情况。此种情况下实例化的对象不需每次都寻找文件,只需调用该实例化的方法,比较节省时间。说明:读者可以根据自己应用程序的实际需求应用不同的方法。FileInfo或DirectoryInfo类的属性(补充)名称作用CreationTime获取创建文件或文件夹的时间DirectoryName(仅用于FileInfo)获取所在文件夹的完整路径名,返回DirectoryInfo实例Parent(仅用于DirectoryInfo)获取指定目录的父目录Extension获取文件的扩展名,对于文件夹则返回空白FullName获取文件或文件夹的完整路径名LastAccessTime获取或设置最后一次访问文件或文件夹的时间LastWriteTime获取或设置最后一次修改文件或文件夹的时间Name获取文件或文件夹的名称Root(仅用于DirectoryInfo)获取路径的根部分Length(仅用于FileInfo)返回文件的大小(以字节为单位)Attributes获取或设置文件(文件夹)的属性,其值是FileAttributes枚举的按位组合4.6.2文件读写操作——流流是.NET操作文件的基本类。.NET中对文件的输入输出工作都要用到流。流分为输入流和输出流。通常,输入流用于将读取数据,最常见的输入流莫过于键盘了。此前应用的大部分输入都是来源于键盘,其实输入流可以来源于很多设备,本章所主要讨论的输入流形式是磁盘文件。输出流则用于向外部目标写数据,本章所讨论的输出流形式也仅限于磁盘文件。流操作类介绍(补充).NETFramework中提供了5种常见的流操作类,用以提供文件的读取、写入等常见操作。类说明BinaryReader用特定的编码将基元数据类型读作二进制值。BinaryWriter以二进制形式将基元类型写入流,并支持用特定的编码写入字符串。FileStream公开以文件为主的Stream,既支持同步读写操作,也支持异步读写操作。StreamReader实现一个TextReader,使其以一种特定的编码从字节流中读取字符。StreamWriter实现一个TextWriter,使其以一种特定的编码向流中写入字符。1.文件流类FileStream(P62)FileStream类的对象表示在磁盘上指向文件的流,既支持同步读写操作,也支持异步读写操作。FileStream类的特点是操作字节和字节数组。这种方式不适合以字符数据构成的文本文件等类似文件的操作,但对随机文件操作等比较有效。FileStream类提供了对文件的低级而复杂的操作,但却可以实现更多高级的功能。FileStream类的构造函数有15种,此处仅对2种作简要介绍。构造函数说明FileStream(String,FileMode)使用指定的路径和创建模式初始化FileStream类的新实例。FileStream(String,FileMode,FileAccess)使用指定的路径、创建模式和读/写权限初始化FileStream类的新实例。FileSteam类要构造FileSteam实例,需要以下4条信息:要访问的文件。表示如何打开文件的模式。例如,创建一个新文件或打开一个现有的文件。如果打开一个现有的文件写入操作是覆盖文件原来的内容,还是添加到文件的末尾?表示访问文件的方式——是只读、只写,还是读写?共享访问——表示是否独占访问文件。如果允许其他流同时访问文件,则这些流是只读、只写还是读写文件?FileMode、FileAccess和FileShare枚举构造FileSteam实例的后三个参数值分别取FileMode、FileAccess和FileShare枚举的枚举值。枚举值FileModeAppend、Create、CreateNew、Open、OpenOrCreate和TruncateFileAccessRead、ReadWrite和WriteFileShareInheritable、None、Read、ReadWrite和Write示例:构造FileSteam实例方式FileStreamfs=newFileStream(Log.txt,FileMode.Append,FileAccess.Write,FileShare.None);对于FileMode,如果要求的模式与文件的现有状态不一致,就会抛出一个异常。FileAccess和FileShare枚举是按位标志,所以这些值可以与C#的按位OR运算符|合并使用。11-5流的定位(补充)利用Seek方法可以灵活定位流的当前位置,使用它需要传递两个参数:偏移量和参考点。其中参考点是SeekOrigin枚举值:Begin:指定流的开头Current:指定流内的当前位置End:指定流的结尾例如:假设文件input.txt中存放的内容是“HelloC#2005!”(文件中不包含双引号)FileInfofi=newFileInfo(input.txt);FileStreamfs=fi.OpenRead();//此时流当前位置是Hfs.Seek(4,SeekOrigin.Begin);//流当前位置是ofs.Seek(-1,SeekOrigin.Current);//流当前位置是l(第二个l)fs.Seek(-2,SeekOrigin.End);//流当前位置是5流的关闭(补充)使用完一个流后,就应关闭它,如案例中代码:fs.Close();关闭流会释放与它相关的资源,允许其他应用程序为同一个文件设置流。在打开和关闭流之间,可以读写其中的数据,FileStream有许多方法可以进行这样的读写。流写入类StreamWriter(补充)应用FileStream类需要许多额外的数据类型转换操作,十分影响效率。另外
本文标题:项目一子任务四(下)
链接地址:https://www.777doc.com/doc-803948 .html