版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第11章文件读写和操作文件操作是一个操作系统重要的组成部分之一,也是一个应用程序所必须具备的功能。一个完整的应用程序,必须具有系统和用户信息交换的功能。而有效的文件操作,是实现信息交换的手段之一。C#提供了强大的文件操作的功能。使用这些功能,可以很方便的实现文件的存储管理、对文件的读写等操作。在本章中,将重点学习以下内容:文件和文件夹的操作;数据流和二进制流;XML文件操作;11.1文件和文件夹文件与前文介绍的数组等变量不同。变量中的数据只是在程序运行时存在,随着程序的终结变量的内容也随之丢失。而文件中的内容可以永久的存储数据到硬盘或其他设备上,这就是通常所说的持久性数据。文件的这种特性可以使我们方便的存储应用程序配置等数据,以方便在程序下一次运行时使用。.NET对文件的操作提供了方便的工具。本章的代码实例中如无特殊说明,将会包含以下引用:usingSystem;usingSystem.IO11.1.1System.IO类介绍System.IO类包含了所有本章所要介绍的输入输出类。下面先对System.IO类进行一个简要的介绍,使读者有一个简单的了解。11.1.2文件类FileFile类是在本章中最重要和最基础的一个类。这个类里提供了大量的公开方法,有42种之多,其中大部分方法为静态方法。File类提供了用于创建、复制、删除、移动和打开文件的静态方法,并协助创建FileStream对象。方法说明Copy将现有文件复制到新文件。Create在指定路径中创建文件。Delete删除指定的文件。如果指定的文件不存在,则不引发异常。Exists确定指定的文件是否存在。Move将指定文件移到新位置,并提供指定新文件名的选项。Open打开指定路径上的FileStream。11.1.3文件夹类Directory读者对Windows的文件管理方式应该并不陌生,其采用的是一种树形管理模式,文件的上层通常还存在若干层文件夹。方法说明CreateDirectory创建指定路径中的所有目录。Delete删除指定的目录。Exists确定给定路径是否引用磁盘上的现有目录。GetCurrentDirectory获取应用程序的当前工作目录。GetDirectories获取指定目录中子目录的名称。GetFiles返回指定目录中的文件的名称。GetLogicalDrives检索此计算机上格式为“<驱动器号>:\”的逻辑驱动器的名称。GetParent检索指定路径的父目录,包括绝对路径和相对路径。Move将文件或目录及其内容移到新位置。11.1.4文件信息类FileInfo文件信息类FileInfo与File类不同。它虽然也提供了创建、复制、删除、移动和打开文件的方法,并且帮助创建FileStream对象,但是它提供得仅仅是实例方法。因此要使用FileInfo类,必须先实例化一个FileInfo对象。属性说明Attributes获取或设置当前FileSystemInfo的FileAttributes。CreationTime获取或设置当前FileSystemInfo对象的创建时间。Directory获取父目录的实例。DirectoryName获取表示目录的完整路径的字符串。Exists获取指示文件是否存在的值。Extension获取表示文件扩展名部分的字符串。FullName获取目录或文件的完整目录。IsReadOnly获取或设置确定当前文件是否为只读的值。Length获取当前文件的大小。Name获取文件名。11.1.5文件夹信息类DirectoryInfo文件夹信息类DirectoryInfo与文件信息类FileInfo相似。它是一个实例类,同样提供了Directory类中的大部分方法。同FileInfo类一样,使用DirectoryInfo类之前必须实例化一个DirectoryInfo对象。属性说明Attributes获取或设置当前FileSystemInfo的FileAttributes。CreationTime获取或设置当前FileSystemInfo对象的创建时间。Exists获取指示目录是否存在的值。Extension获取表示文件扩展名部分的字符串。Name获取此DirectoryInfo实例的名称。Parent获取指定子目录的父目录。Root获取路径的根部分。11.1.6文件信息类与文件夹信息类的用法文件信息类FileInfo和文件夹信息类DirectoryInfo具有文件类File和文件夹类Directory的大部分功能。读者在实际应用中应当注意选择使用不同的实现。File类和Directory类适合用于在对象上单一的方法调用。此种情况下静态方法的调用在速度上效率比较高,因为此种方法省去了实例化新对象的过程。FileInfo类和DirectoryInfo类适合用于对同一文件或文件夹进行几种操作的情况。此种情况下实例化的对象不需每次都寻找文件,只需调用该实例化的方法,比较节省时间。说明:读者可以根据自己应用程序的实际需求应用不同的方法。11.2流流是.NET操作文件的基本类。.NET中对文件的输入输出工作都要用到流。流分为输入流和输出流。通常,输入流用于将读取数据,最常见的输入流莫过于键盘了。此前应用的大部分输入都是来源于键盘,其实输入流可以来源于很多设备,本章所主要讨论的输入流形式是磁盘文件。输出流则用于向外部目标写数据,本章所讨论的输出流形式也仅限于磁盘文件。11.2.1流操作类介绍.NETFramework中提供了5种常见的流操作类,用以提供文件的读取、写入等常见操作。类说明BinaryReader用特定的编码将基元数据类型读作二进制值。BinaryWriter以二进制形式将基元类型写入流,并支持用特定的编码写入字符串。FileStream公开以文件为主的Stream,既支持同步读写操作,也支持异步读写操作。StreamReader实现一个TextReader,使其以一种特定的编码从字节流中读取字符。StreamWriter实现一个TextWriter,使其以一种特定的编码向流中写入字符。11.2.2文件流类FileStream文件流类FileStream公开了以文件为主的Stream,既支持同步读写操作,也支持异步读写操作。FileStream类的特点是操作字节和字节数组。这种方式不适合以字符数据构成的文本文件等类似文件的操作,但对随机文件操作等比较有效。FileStream类提供了对文件的低级而复杂的操作,但却可以实现更多高级的功能。FileStream类的构造函数有15种,此处仅对2种作简要介绍。11.2.2文件流类FileStream构造函数说明FileStream(String,FileMode)使用指定的路径和创建模式初始化FileStream类的新实例。FileStream(String,FileMode,FileAccess)使用指定的路径、创建模式和读/写权限初始化FileStream类的新实例。11.2.3流写入类StreamWriter应用FileStream类需要许多额外的数据类型转换操作,十分影响效率。本小节将会介绍另外一种更为简单实用的写入方法即StreamWriter类。StreamWriter类允许直接将字符和字符串写入文件。StreamWriter类的构造方法一共有七种,此处只介绍常用的三种,如表11.11所示。表11.12介绍了StreamWriter类的常用方法。11.2.3流写入类StreamWriter构造函数说明StreamWriter(Stream)用UTF-8编码及默认缓冲区大小,为指定的流初始化StreamWriter类的一个新实例。StreamWriter(String)使用默认编码和缓冲区大小,为指定路径上的指定文件初始化StreamWriter类的新实例。StreamWriter(String,Boolean)使用默认编码和缓冲区大小,为指定路径上的指定文件初始化StreamWriter类的新实例。如果该文件存在,则可以将其改写或向其追加。如果该文件不存在,则此构造函数将创建一个新文件。方法说明Close关闭当前的StreamWriter对象和基础流。Write写入流。WriteLine写入重载参数指定的某些数据,后跟行结束符。11.2.4流读取类StreamReader相对于StreamWriter类,StreamReader类提供了另一种从文件中读取数据的方法。StreamReader类的应用方式非常相似于StreamWriter类,此处直接介绍StreamReader类的构造函数。其常见构造方法如表11.13所示。表11.14介绍了其常用方法。构造函数说明StreamReader(Stream)为指定的流初始化StreamReader类的新实例。StreamReader(String)为指定的文件名初始化StreamReader类的新实例。11.2.4流读取类StreamReader方法说明Close关闭StreamReader对象和基础流,并释放与读取器关联的所有系统资源。Read读取输入流中的下一个字符或下一组字符。ReadLine从当前流中读取一行字符并将数据作为字符串返回。ReadToEnd从流的当前位置到末尾读取流。11.2.5二进制流写入类BinaryWriterBinaryWriter类是除了FileStream和StreamWriter之外的另一种向文件写入数据的方式。与之前两种方式不同的是BinaryWriter类以二进制形式将基元类型写入流,并支持用特定的编码写入字符串。其构造方法如表11.15所示。表11.16介绍了BinaryWriter类的常用方法。构造函数说明BinaryWriter()初始化向流中写入的BinaryWriter类的新实例。BinaryWriter(Stream)基于所提供的流,用
UTF-8作为字符串编码来初始化BinaryWriter类的新实例。BinaryWriter(Stream,Encoding)基于所提供的流和特定的字符编码,初始化BinaryWriter类的新实例。11.2.5二进制流写入类BinaryWriter方法说明Close关闭当前的BinaryWriter对象和基础流。Write将值写入当前流。11.2.6二进制流读取类BinaryReaderBinaryReader类是和BinaryWriter类相对应的二进制数据读取类。BinaryReader类用特定的编码将基元数据类型读作二进制值。其应用方法与BinaryWriter大致相同,此处直接介绍其构造方法。其构造方法如表11.17所示。表11.18介绍了BinaryWriter类的常用方法。构造函数说明BinaryReader(Stream)基于所提供的流,用UTF8Encoding初始化BinaryReader类的新实例。BinaryReader(Stream,Encoding)基于所提供的流和特定的字符编码,初始化BinaryReader类的新实例。11.2.6二进制流读取类BinaryReader方法说明Close关闭当前阅读器及基础流。Read从基础流中读取字符,并提升流的当前位置。11.3XML文件读写作为一种标准数据交换格式,XML主要用于在不同系统中交换数据,以及在网络上传递大量的结构化数据。本节将简单介绍XML的概念以及在.NET中如何使用XML。11.3.1XML相关类在.NET框架中,操作DOM模型的类位于System.Xml命名空间中,其中常用的类如图。11.3.2XML数据的访问首先介绍将XML文档读入DOM对象的技术。.NET支持多种方式读取XML文档,包括从字符串流、URL、文本读取器或者XmlRreader等方式。1.使用XmlDocument读取XML2.使用XmlReader读取XML3.使用XmlNode读取节点11.3.2XML数据的访问11.3.3创建XML节点可以通过向XML中插入新的节点来修改文档,首先需要在DOM对象中创建新的节点。可以使用XmlDocument的Create*系列方法来实现这个功能。针对不同的节点类型,Create*系列方法有所不同,但都以Create开头,并以节点的类型结尾,如ment(创建注释)、CreateTextNode(创建叶子节点)等。另外,还可以使用CreateNode()方法,结合节点类型参数建立各种类型的节点,形式如下。publicvirtualXmlNodeCr
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年大学生物学(遗传学)试题及答案
- 2025年大学水利环境化学(水利工程环保)试题及答案
- 2025年高职水产养殖学(水产动物营养)试题及答案
- 2025年大学(农学)植物生理学代谢阶段测试题及解析
- 2025年中职历史(世界近现代史)试题及答案
- 2025年高职秘书学(商务秘书实务)试题及答案
- 2025年大学消防工程(消防设计)试题及答案
- 2025年中职飞机机电设备维修(航电系统故障排除)试题及答案
- 2025年大学(机械电子工程)液压与气动技术模拟试题及解析
- 2025年高职(云计算技术应用)云迁移技术试题及解析
- 酒驾满分考试题库及答案2025
- 库房安全管理规范培训课件
- 酒店运营经理年终总结
- 华润燃气安全培训
- 高校科研经费财会监督机制的优化路径与实证研究
- 高中物理化学生物专题复习资料
- 学堂在线 雨课堂 学堂云 信息素养-学术研究的必修课 章节测试答案
- 市政工程施工组织资源配备计划
- 银行消防管理办法
- 奥沙利铂使用的健康宣教
- 矿山三级安全教育培训
评论
0/150
提交评论