




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
项目一子任务四2023/7/16项目一子任务四任务4.6学习文件操作文件操作是一个操作系统重要的组成部分之一,也是一个应用程序所必须具备的功能。一个完整的应用程序,必须具有系统和用户信息交换的功能。而有效的文件操作,是实现信息交换的手段之一。C#提供了强大的文件操作的功能。使用这些功能,可以很方便的实现文件的存储管理、对文件的读写等操作。常见的对文件进行操作的方式有两种,文本模式与二进制模式。项目一子任务四文件和文件夹文件与前文介绍的数组等变量不同。变量中的数据只是在程序运行时存在,随着程序的终结变量的内容也随之丢失。而文件中的内容可以永久的存储数据到硬盘或其他设备上,这就是通常所说的持久性数据。文件的这种特性可以使我们方便的存储应用程序配置等数据,以方便在程序下一次运行时使用。.NET对文件的操作提供了方便的工具。本章的代码实例中如无特殊说明,将会包含以下引用:usingSystem;usingSystem.IO项目一子任务四System.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类需要许多额外的数据类型转换操作,十分影响效率。另外一种更为简单实用的写入方法即StreamWriter类。StreamWriter类是专门用来处理文本文件的类,可以方便的向文本文件写入字符串。StreamWriter类允许直接将字符和字符串写入文件。StreamWriter类的构造方法一共有七种,此处只介绍常用的三种,如表所示。构造函数说明StreamWriter(Stream)用UTF-8编码及默认缓冲区大小,为指定的流初始化StreamWriter类的一个新实例。StreamWriter(String)使用默认编码和缓冲区大小,为指定路径上的指定文件初始化StreamWriter类的新实例。StreamWriter(String,Boolean)使用默认编码和缓冲区大小,为指定路径上的指定文件初始化StreamWriter类的新实例。如果该文件存在,则可以将其改写或向其追加。如果该文件不存在,则此构造函数将创建一个新文件。项目一子任务四表:StreamWriter类的常用方法(补充)方法说明Close关闭当前的StreamWriter对象和基础流。Write写入流。WriteLine写入重载参数指定的某些数据后跟行结束符。文本文件的写操作在对文本文件进行写操作时,要注意文本文件不能处于打开状态,若出现写操作失败,请修改文本文件的安全属性,即右击文本文件→属性→安全;项目一子任务四2.流读取类StreamReader(P62-63)相对于StreamWriter类,StreamReader类提供了另一种从文件中读取数据的方法。StreamReader类的应用方式非常相似于StreamWriter类,StreamReader类是专门用来读取文本文件的类。此处直接介绍StreamReader类的构造函数。其常见构造函数和方法如表所示。构造函数说明StreamReader(Stream)为指定的流初始化StreamReader类的新实例。StreamReader(String)为指定的文件名初始化StreamReader类的新实例。方法说明Close关闭StreamReader对象和基础流,并释放与读取器关联的所有系统资源。Read读取输入流中的下一个字符或下一组字符。ReadLine从当前流中读取一行字符并将数据作为字符串返回。ReadToEnd从流的当前位置到末尾读取流。项目一子任务四StreamReader类该类只能执行读操作。一般构造时提供两个参数:编码格式文件名或另一个流对象例如:StreamReadersw=newStreamReader("ReadMe.txt");StreamReadersw=newStreamReader("ReadMe.txt",Encoding.UTF8);FileStreamfs=newFileStream("Log.txt",FileMode.Open,FileAccess.Read);StreamReadersr=newStreamReader(fs);项目一子任务四Encoding枚举命名空间:System.Text 这个类是一个抽象基类,可以根据这个类定义许多类,其方法可获取实际的文本编码。它的每个属性都返回相应类的一个实例,可以使用的属性包括:ASCIIUnicodeUTF7UTF8UTF32BigEndianUnicode也可通过GetEncoding方法获得指定代码页的编码。11-8项目一子任务四二进制流写入类BinaryWriter(补充)BinaryWriter类是除了FileStream和StreamWriter之外的另一种向文件写入数据的方式。与之前两种方式不同的是BinaryWriter类以二进制形式将基元类型写入流,并支持用特定的编码写入字符串。其构造函数和方法如表所示。构造函数说明BinaryWriter()初始化向流中写入的BinaryWriter类的新实例。BinaryWriter(Stream)基于所提供的流,用UTF-8作为字符串编码来初始化BinaryWriter类的新实例。BinaryWriter(Stream,Encoding)基于所提供的流和特定的字符编码,初始化BinaryWriter类的新实例。方法说明Close关闭当前的BinaryWriter对象和基础流。Write将值写入当前流。11-9项目一子任务四二进制流读取类BinaryReader(补充)BinaryReader类是和BinaryWriter类相对应的二进制数据读取类。BinaryReader类用特定的编码将基元数据类型读作二进制值。其应用方法与BinaryWriter大致相同,此处直接介绍其构造方法。其构造函数和方法如表所示。构造函数说明BinaryReader(Stream)基于所提供的流,用UTF8Encoding初始化BinaryReader类的新实例。BinaryReader(Stream,Encoding)基于所提供的流和特定的字符编码,初始化BinaryReader类的新实例。方法说明Close关闭当前阅读器及基础流。Read从基础流中读取字符,并提升流的当前位置。11-10项目一子任务四任务4.7学习Math类(P63)循环语句TEXTTEXTMath类中常用的数学运算方法函数名用途举例结果Abs()返回指定数字的绝对值Math.Abs(-23.36)23.36Exp()返回e的指定次幂Math.Exp(1)2.7182818Floor()返回舍去小数后的结果Math.Floor(2.68)2Log10()返回指定数字以10为底的对数Math.Log10(100)2Log()返回指定数字的对数(自然对数)Math.Log(2.715)0.996948Max()返回两个指定数字中较大的一个Math.Max(3,5)5Min()返回两个数字中较小的一个Math.Min(3,5)3Pow()返回指定数字的指定次幂Math.Pow(2,3)8Round()对浮点数进行四舍五入Math.Round(2.68)3Sign()返回表示数字符号的值。>0为1;<0为-1;=0为0Math.Sign(-34)-1Sqrt()返回指定数字的平方根Math.Sqrt(9)3项目一子任务四任务4.8学习String类(P64-66)循环语句TEXTTEXT
方法说明举例Equals(stringvalue)比较两个字符串是否相等与"=="作用一样。返回true或fals
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 社会适应性西方政治制度的未来方向试题及答案
- 网络协议栈试题及答案简介
- 软件设计师行业现状分析试题及答案
- 项目管理成功案例分享试题及答案
- 国际关系理论对国家行为的影响试题及答案
- 机电工程考试准备的经验交流与试题与答案
- 机电工程电机控制技术的试题及答案
- 机电工程经济分析考试题
- 网络工程师考试注意事项及2025年试题答案总结
- 重视机电工程考试的知识体系建立试题及答案
- 医用高数课后习题答案
- 电力线路迁改工程的施工设计方案
- 开封中学教师招聘2022年考试真题及答案解析二2
- 客户沟通与交流课件
- 国家电网招投标培训课件
- BVI公司法全文(英文版)
- 社会责任手册-完整版
- 技术服务合同(中国科技部范本)
- 城市轨道交通客运组织电子教案(全)完整版课件整套教学课件
- GB∕T 33917-2017 精油 手性毛细管柱气相色谱分析 通用法
- 高压氧治疗操作规程以及护理常规
评论
0/150
提交评论