您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 市场营销 > 轻松学C#之文件和流
第12章文件和流文件是在各种媒质上永久存储的数据的有序集合。它是一种进行数据读写操作的基本对象。流非常类似单独的磁盘文件,它也是进行数据读取操作的基本对象。本章将为大家讲述文件操作最常用的四个类:文件类File、文件夹类Directory、文件信息类FileInfo和文件夹信息类DirectoryInfo。本章还将为大家介绍流的一些常用类。包括:文件流类FileStream、流写入类StreamWriter、流读取类StreamReader、二进制流写入类BinaryWriter和二进制流读取类BinaryReader。12.1SYSTEM.IO类在System.IO类中提供了多种类型,用于进行文件和流的读写操作。这些操作可以同步进行,也可以异步进行。下表中列出了System.IO类下的部分类。类名说明BinaryReader用特定的编码将基元数据类型读作二进制值BinaryWriter以二进制形式将基元类型写入流,并支持用特定的编码写入字符串BufferedStream给另一流上的读写操作添加一个缓冲层。无法继承此类Directory公开用于创建、移动和枚举通过目录和子目录的静态方法。无法继承此类DirectoryInfo公开用于创建、移动和枚举目录和子目录的实例方法。无法继承此类DirectoryNotFoundException当找不到文件或目录的一部分时所引发的异常DriveInfo提供对有关驱动器的信息的访问DriveNotFoundException当尝试访问的驱动器或共享不可用时引发的异常EndOfStreamException读操作试图超出流的末尾时引发的异常ErrorEventArgs为Error事件提供数据File提供用于创建、复制、删除、移动和打开文件的静态方法,并协助创建FileStream对象FileInfo提供创建、复制、删除、移动和打开文件的实例方法,并且帮助创建FileStream对象。无法继承此类12.2文件类FILEFile类是一个静态类。它不能够显式地创建一个对象实例。但是可以使用类名加静态方法名直接进行调用。File类通常用于一些比较典型的文件处理操作。例如,文件创建、打开、移动、复制、重命名、删除和追加。12.2.1文件的创建和打开下表是File类提供的一些常用的静态方法。其中,最常用的方法是Create()。Create()方法用来在指定的路径中创建文件。该方法语法如下图所示。其中,path参数表示要创建的文件路径。该方法返回一个文件流对象。方法说明CreateText(stringFilePath)创建或打开一个文件用于写入UTF-8编码的文本OpenText(stringFilePath)打开现有UTF-8编码文本文件以进行读取Open(stringFilePath,FileMode)打开指定路径上的FileStream,具有读/写访问权限Create(stringFilePath)在指定路径中创建文件OpenRead(stringFilePath)打开现有文件以进行读取AppendText(stringFilePath)创建一个StreamWriter,它将UTF-8编码文本追加到现有文件publicstaticFileStreamCreate(stringpath);方法名文件路径返回FileStream类型【示例12-1】以下程序使用Create方法在D盘c#目录下创建一个文件file.txt。在该例中,@表示忽略转译符。在示例12-1中,m_path被赋值为@”d:/c#/file.txt”;,也可以写成@”d:\C#\file.txt”;。也就是说,加@的情况下,“/”或“\”都是正确的。如果不加@,要写为:“d:\\c#\\file.txt”;。而且,不论有没有@,盘符后面的“/”或“\”或“\\”都可以省略。注意:本章代码必须添加以下代码,以引用usingSystem.IO;命名空间。否则,会出现下图所示的错误。12.2.2判断文件是否存在通常在创建和删除文件之前都需要判断文件是否存在。假如,在创建文件之前没有判断文件是否存在。这样,创建的新文件就会覆盖原有文件,造成数据丢失。判断文件是否存在的方法声明如下图所示。其中,参数path指定文件路径。如果文件不存在,或者访问者不具有访问此文件的权限,返回false。【示例12-2】以下程序判断文件是否存在。publicstaticboolExists(stringpath);返回bool类型方法名文件路径12.2.3复制文件复制文件指的是从读取一个文件的内容,并将读取到的内容添加到另一文件中。复制文件时需要指出需要读取的文件位置和大小等方面的信息,还需要指定目标文件的位置。其格式如下图所示。其中,该方法的返回值为空。sourceFileName是要复制的文件,destFileName是目标文件的名称,overwrite表示是否可以改写目标文件,是则为true;否则为false。publicstaticvoidCopy(stringsourceFileName,stringdestFileName,booloverwrite);返回void源文件目标文件判断是否改写【示例12-3】以下代码演示了复制文件的方式。在该例中,必须判断文件是否存在。如果不存在,则需要创建。如果存在便可复制。注意:文件复制复制的是文件内容,不是文件。12.2.4删除文件当要删除文件的时候,可以直接调用Delete方法便可删除文件。但是也需要判断文件是否存在。删除文件的格式如下图所示。其中,参数path表示要删除的文件。【示例12-4】以下程序演示了文件的删除。其中,与文件复制相同,必须判断文件是否存在。publicstaticvoidDelete(stringpath);返回值为void文件12.2.5文件的加密和解密加密和解密文件是为了防止没有授权的访问者看到不应当看到的信息。文件的加密和解密的声明如下图所示。其中,参数filename表示需要进行加密和解密的文件名称。【示例12-5】以下程序介绍文件是如何加密和解密的。注意:加密文件后只有调用此方法的帐户才能解密文件。publicstaticvoidAddCrypt(stringfilename){File.Encrypt(filename);}publicstaticvoidReduceCrypt(stringfilename){File.Decrypt(filename);}加密关键字解密关键字文件名文件名返回值为void12.2.6文件读取File类提供了多种以Read开头的文件读取方法,较常用的声明如下表所示。声明含义publicstaticbyte[]ReadAllBytes(stringpath);打开一个文件,将文件的内容读入一个字符串,然后关闭该文件。返回一个字节数组publicstaticstring[]ReadAllLines(stringpath);打开一个文本文件,读取文件的所有行,然后关闭该文件。返回一个字符串数组publicstaticstring[]ReadAllLines(stringpath,Encodingencoding);打开一个文件,使用指定的编码读取文件的所有行,然后关闭该文件。返回一个字符串数组publicstaticstringReadAllText(stringpath);打开一个文本文件,读取文件的所有行,然后关闭该文件。返回一个字符串publicstaticstringReadAllText(stringpath,Encodingencoding);打开一个文件,使用指定的编码读取文件的所有行,然后关闭该文件。返回一个字符串12.3文件夹类DIRECTORYDirectory类是进行目录管理的。利用它,我们可以完成对目录及子目录进行创建、移动、浏览等操作,甚至还可以定义隐藏目录和只读目录。Directory的构造函数形式如下publicDirectory(stringpath);其中,path表示目录所在的路径。Directory类的主要属性如下表所示。属性含义Attributes0x01表示只读,0x02表示隐藏Name当前路径名Parent上一级父目录名Root所有根目录名CreationTime目录创建时间LastAccessTime上一次访问目录的时间LastWriteTime上一次修改目录的时间常用的Directory类的成员方法如下表所示。方法说明CreateDirectory创建指定路径中的所有目录Delete删除指定的目录Exists确定给定路径是否引用磁盘上的现有目录GetCurrentDirectory获取应用程序的当前工作目录GetDirectories获取指定目录中子目录的名称GetFiles返回指定目录中的文件的名称GetLogicalDrives检索此计算机上格式为“驱动器号:\”的逻辑驱动器的名称GetParent检索指定路径的父目录,包括绝对路径和相对路径Move将文件或目录及其内容移到新位置12.3.1创建文件夹文件夹的创建跟文件的创建相似。其格式如下图所示。【示例12-6】利用Directory的CreateDirectory方法创建目录。publicstaticDirectoryInfoCreateDirectory(stringpath)返回Directory类型方法名文件路径12.3.2删除文件夹文件夹的删除与文件的删除也相似。其格式如下图所示。其中,参数path表示要删除的文件夹。【示例12-7】以下程序利用Directory类的Delete方法删除文件夹。其中,在删除文件夹的时候,需要利用Exists方法判断文件夹是否存在。如果存在,直接删除。publicstaticvoidDelete(stringpath);返回值为void文件夹12.3.3获取文件夹获取文件夹的声明方式如下:publicstaticstringGetCurrentDirectory();获取应用程序的当前工作目录publicstaticstring[]GetDirectories(stringpath);获取指定目录的子目录,返回一个字符串数组publicstaticstring[]GetDirectories(stringpath,stringsearchPattern);使用指定的搜索模式,获取指定目录中的子目录。搜索模式可以使用通配符进行搜索,返回字符串数组。publicstaticstring[]GetDirectories(stringpath,stringsearchPattern,SearchOptionsearchOption);使用指定的搜索模式,获取指定目录中的子目录。可经由SearchOption,指定操作是否包含子目录。【示例12-8】以下程序介绍如何获取文件目录。12.4文件信息类FILEINFO文件信息类FileInfo与File类不同。虽然它也提供了创建、复制、删除、打开等方法。但是它提供的是实例方法。如果要使用FileInfo类,必须实例化一个FileInfo对象。FileInfo常用属性,如下表所示。【示例12-9】以下程序利用FileInfo类的Exists方法判断文件是否存在,同时也调用Delete方法删除文件。属性说明Attributes获取或设置当前FileSystemInfo的FileAttributesCreationTime获取或设置当前FileSystemInfo对象的创建时间Directory获取父目录的实例DirectoryName获取表示目录的完整路径的字符串Exists获取指示文件是否存在的值Extension获取表示文件扩展名部分的字符串FullName获取目录或文件的完整目录IsReadOnly获取或设置确定当前文件是否为只读的值Length获取
本文标题:轻松学C#之文件和流
链接地址:https://www.777doc.com/doc-4702389 .html