《第6章 文件操作.ppt》由会员分享,可在线阅读,更多相关《第6章 文件操作.ppt(20页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第6章章 文件操作文件操作6.1 文件和文件夹文件与前文介绍的数组等变量不同。变量中的数据只是在程序运行时存在,随着程序的终结变量的内容也随之丢失。而文件中的内容可以永久地存储数据到硬盘或其他设备上,这就是通常所说的持久性数据。文件的这种特性可以使我们方便地存储应用程序配置等数据,以便在程序下一次运行时使用。.NET对文件的操作提供了方便的工具。本章的代码实例中如无特殊说明,将会包含以下引用:1.using System;2.using System.IO;6.1.1 System.IO类介绍System.IO类包含了所有本章所要介绍的输入输出类。下面先对System.IO类进行一个简要的介
2、绍,使读者有一个简单的了解。表6-1所示为System.IO包含的所有类及其功能。System.IO命名空间下的类提供了非常强大的功能。对这些类熟练地掌握可以使我们编写出功能十分强大的代码,但对于初学者来说,常用的类有File,Directory,Path,FileInfo,DirectoryInfo,FileStream,StreamReader,StreamWriter及FileSystemWatcher等,这些类的功能可以满足一般应用程序的需求。下面的章节中,将对这些常用类进行逐一介绍。6.1.2 文件类文件类(File)是最重要和最基础的一个类。File类提供了大量的公开方法,有42种
3、之多,其中大部分方法为静态方法。File类提供了用于创建、复制、删除、移动和打开文件的静态方法,并协助创建FileStream对象。6.1.3 文件夹类读者对Windows的文件管理方式应该并不陌生,其采用的是一种树形管理模式,文件的上层通常还存在若干层文件夹。本小节将要向读者介绍C#中文件夹类Directory的知识。Directory类同File类相似,公开了用于创建、移动目录和子目录等静态方法,方法非常多,此处介绍一些常用方法,6.1.4 文件信息类文件信息类(FileInfo)与File类不同。它虽然也提供了创建、复制、删除、移动和打开文件的方法,并且帮助创建FileStream对象,
4、但是它提供的仅仅是实例方法。因此要使用FileInfo类,必须先实例化一个FileInfo对象。FileInfo类的常用方法与File类基本相同,此处仅介绍FileInfo类的常用属性,6.1.5 文件夹信息类文件夹信息类(DirectoryInfo)与文件信息类(FileInfo)相似。它是一个实例类,同样提供了Directory类中的大部分方法。同FileInfo类一样,使用DirectoryInfo类之前必须实例化一个DirectoryInfo对象。DirectoryInfo类拥有和FileInfo类几乎相同的属性,6.1.6 文件信息类与文件夹信息类的用法文件信息类(FileInfo)
5、和文件夹信息类(DirectoryInfo)具有文件类(File)和文件夹类(Directory)的大部分功能。读者在实际应用中应当注意选择使用不同的实现。(1)File类和Directory类适合用于在对象上单一的方法调用。此种情况下静态方法的调用在速度上效率比较高,因为此种方法省去了实例化新对象的过程。(2)FileInfo类和DirectoryInfo类适合用于对同一文件或文件夹进行几种操作的情况。此种情况下,实例化的对象不需每次都寻找文件,只需调用该实例化的方法,比较节省时间。6.2 流流是.NET操作文件的基本类。.NET中对文件的输入输出操作都要用到流。流分为输入流和输出流。通常,
6、输入流用于读取数据,最常见的输入流莫过于键盘了。此前应用的大部分输入都是来源于键盘,其实输入流可以来源于很多设备,本章所主要讨论的输入流形式是磁盘文件。输出流则用于向外部目标写数据,本章所讨论氖涑隽餍问揭步鱿抻诖排涛募6.2.1 流操作类介绍.NET Framework中提供了5种常见的流操作类,用以提供文件的读取、写入等常见操作。该操作类的简单说明如表类说 明BinaryReader用特定的编码将基元数据类型读作二进制值BinaryWriter以二进制形式将基元类型写入流,并支持用特定的编码写入字符串FileStream公开以文件为主的Stream,既支持同步读写操作,也支持异步读写操作St
7、reamReader实现一个TextReader,使其以一种特定的编码从字节流中读取字符StreamWriter实现一个TextWriter,使其以一种特定的编码向流中写入字符6.2.2 文件流类(FileStream)文件流类(FileStream)公开了以文件为主的Stream,既支持同步读写操作,也支持异步读写操作。FileStream类的特点是操作字节和字节数组。这种方式不适合以字符数据构成的文本文件等类似文件的操作,但对随机文件操作等比较有效。FileStream类提供了对文件的低级而复杂的操作,但却可以实现更多高级的功能。FileStream类的构造函数有15种,此处仅对两种作简要
8、介绍,6.2.3 流写入类应用FileStream类需要许多额外的数据类型转换操作,十分影响效率。本小节将介绍另外一种更为简单实用的写入方法即流写入类(StreamWriter)。StreamWriter类允许直接将字符和字符串写入文件。StreamWriter类的构造函数一共有7种,此处只介绍常用的3种,6.2.4 流读取类相对于StreamWriter类,流读取类(StreamReader)提供了另一种从文件中读取数据的方法。StreamReader类的应用方式非常相似于StreamWriter类,此处直接介绍StreamReader类的构造函数。6.2.5 二进制流写入类二进制流写入类(
9、BinaryWriter)是除了FileStream和StreamWriter之外的另一种向文件写入数据的方式。与之前两种方式不同的是BinaryWriter类以二进制形式将基元类型写入流,并支持用特定的编码写入字符串。6.2.6 二进制流读取类二进制流读取类(BinaryReader)是和BinaryWriter类相对应的二进制数据读取类。BinaryReader类用特定的编码将基元数据类型读作二进制值。其应用方法与BinaryWriter大致相同,此处直接介绍其构造函数。6.3 文件操作实例此处将会实现一个比较复杂的实例。这个实例中将涉及大部分于文件相关的操作,使读者对文件的相关操作有一个
10、更为全面的认识。实例中将要实现如下功能:(1)指定目录下文件的显示;(2)文件的添加;(3)文件的删除;(4)文件的重命名;(5)文件的打开。6.3.1 窗体布局窗体布局步骤如下。6.3.2 代码实现下面开始编写代码。在frmMain.cs中添加如下引用:1.using System.IO;2.using System.Diagnostics;在frmMain窗体的属性面板中的事件选项卡中找到Load项,双击右侧空白处,Visaul Studio 2005会自动转入代码编辑页面,并产生了一个空方法frmMain_Load。Visaul Studio 2005已经在frmMain.Designe
11、r.cs中将“frmMian”窗体的Load方法和frmMain_Load方法关联起来。6.3.3 实例进阶希望读者通过对程序的进一步的修改增强对文件输入输出的了解和认识,并最终实现一个简单的资源管理器。通常一个资源管理器的结构中需要包含文件列表,这其中包括树形列表和一般列表。另外还要包括一些常用的文件操作。6.4 小结至此,在本章已经讲解了.NET中操作文件进行输入输出操作的大部分方法。本章介绍了System.IO命名空间下的File类,Directory类,FileInfo类,DirectoryInfo类等基础类。本章还介绍了FileStream类、StreamReader类、StreamWriter类、BinaryReader类及BinaryWriter类等常用操作类。并且通过代码实例,使读者了解了这些类的用法。本章的最后还实现了一个较为复杂的应用程序。帮助读者加深对输入输出的了解,以及对文件操作的认识。对本章内容感兴趣的读者还可以尝试以下内容:(1)文件的加解密:File.Encrypt方法和File.Decrypt方法;(2)文件的压缩与解压缩:System.IO.Compression命名空间;(3)驱动器信息类:DriveInfo类;(4)文件系统监控类:FileSystemWatcher类;(5)路径类:Path类。
限制150内