1、变量和数组只能临时存储数据,且数据量很小,当应用程序终止,数据就会丢失。如果需要将数据长期存储或者存储大量数据,就需要用到文件。文件维护的数据通常称为持久数据,存储在计算机的辅助存储设备中,如磁盘、光盘等。许多程序都要与外部数据进行交互,如数据库、XML,甚至文本文件,因此文件操作是软件开发中必不可少的任务。对于程序设计语言来说,文件处理也是最重要的能力之一。只有通过文件处理,语言才能支持需要处理大量持久数据的大型应用程序开发。本章介绍VB.NET中的强大丰富的文件处理技术。15.1 文件概述15.2 System.IO名称空间15.3 My.Computer.FileSystem对象15.4
2、 实例:图片浏览器程序文件是存储在某种介质上数据的集合,就其本身来讲,文件就是磁盘上的一系列相关的数据字节。VB.NET中将文件视为一个顺序字节的流,其结构如所示。每个文件都结束于一个EOF(End Of File文件尾)标记。需要注意的是,文件和文件流并不是相同的概念。顺序方式,用于在连续的块中读取和写入文本文件。随机方式,用于读取和写入结构为固定长度记录的文本或二进制文件。二进制方式,用于读取和写入任意结构的文件。第一种是使用Visual Basic运行时函数进行文件访问(VB传统方式直接文件访问)。第二种是通过.Net中的System.IO模型访问。第三种是通过文件系统对象模型FSO访问
3、。在VB.Net中与文件操作有关的类都集中在System.IO名称空间中。图15-1是此名称空间的类图,其中包含了很多用于文件处理的类。要使用这些类的话,需要在项目中引入该名称空间。Imports System.IOFile类提供文件典型操作的共享方法,如复制、移动、重命名、创建、打开、删除和追加到文件等,而FileInfo类则提供相同功能的实例方法。方法说明Copy()将文件从源位置复制到目标位置Create()在规定的路径上创建文件Delete()删除文件Open()在规定的路径上返回FileStream对象Move()将规定的文件移动到新位置。可以在新位置为文件规定不同的名称File类中
4、的方法都是共享方法,可以直接由类名来引用。而FileInfo类则需要先实例化,然后通过对象吗引用其方法。类似的,Directory类和DirectoryInfo类也具有类似的关系。二者均提供目录的典型操作,如创建、删除、移动、获取当前目录和文件等。区别在于,Directory类提供共享方法,而DirectoryInfo类提供实例方法。方法说明CreateDirectory()创建具有规定路径的目录Delete()删除规定的目录以及其中的所有文件GetDirectories()返回表示当前目录下的目录名的string对象数组GetFiles()返回在当前目录中的文件名的string对象数组Get
5、FilesSystemEntries()返回在当前目录中的文件和目录名的string对象数组Move()将规定的目录移动到新位置。可以在新位置为文件夹规定一个新名称流提供一种向文件写入字节和从文件中读取字节的方式。VB.NET将文件视为一个字节流。要对文件进行读写操作,就需要使用流。从流读取。读取是从流到数据结构(如字节数组)的数据传输。向流写入。写入是从数据源到流的数据传输。查找。查找是对流内的当前位置进行的查询和修改。StreamReader和StreamWriter类使用特定的编码从字节流中读取字符和往字节流中写入字符。其默认编码为UTF-8。这两个类在使用之前需要实例化,通常使用打开文
6、件或创建文件的操作来获取该类的实例。下面代码实现向二进制文件写入1到10的数字。1 写入二进制文件2 Dim filename As String=c:file.bin 文件路径3 如果文件存在就先删除,否则新文件就不能创建4 If(File.Exists(filename)Then5 File.Delete(filename)6 End If7 创建文件流,新建方式8 Dim fs As New FileStream(filename,FileMode.CreateNew)9 以二进制方式写文件10 Dim bw As New BinaryWriter(fs)11 For i=0 To 91
7、2 bw.Write(i)13 Next14 bw.Close()15 fs.Close()下面代码使用StreamWriter类向文本文件写入内容。1 写入文本文件2 Dim path As String=c:test.txt 文件全路径3 Dim sw As New StreamWriter(path)4 sw.Write(今天是:)5 sw.WriteLine(DateTime.Now)6 sw.Close()下面这段代码就是将上小节创建的二进制文件读取并显示出来。1 读取二进制文件2 Dim filename As String=c:file.bin 文件路径3 创建文件流,打开读取4
8、 Dim fs As New FileStream(filename,FileMode.Open,FileAccess.Read)5 从二进制文件中读取整数6 Dim br As New BinaryReader(fs)7 For i=0 To 98 Console.WriteLine(br.ReadInt32()9 Next10br.Close()11fs.Close()My.Computer.FileSystem对象提供用于处理驱动器、文件和目录的属性及方法。通过使用该对象,使得文件的读取和写入变得非常简单。属性说 明CurrentDirectory获取或设置当前目录Drives获取或设置
9、有关驱动器的信息SpecialDirectories返回My.Computer.FileSystem.SpecialDirectories对象,它可用于访问特殊的目录,如Temp或MyDocuments等方法说明CopyFile复制文件DeleteFile删除文件FileExists返回一个 Boolean,指示文件是否存在GetFileInfo返回指定路径的 FileInfo 对象MoveFile移动文件RenameFile重命名文件方法说明OpenTextFieldParser打开TextFieldParserOpenTextFileReader打开TextReaderOpenTextFi
10、leWriter打开TextWriterReadAllBytes从二进制文件中读取ReadAllText从文本文件中读取WriteAllBytes写入到二进制文件WriteAllText写入到文本文件方法说明CombinePath以String形式返回格式正确的组合路径CopyDirectory复制目录CreateDirectory创建目录DeleteDirectory删除目录DirectoryExists返回一个Boolean指示目录是否存在FindInFiles返回字符串的只读集合,这些字符串表示包含指定文本的文件的名称GetDirectories返回一个String集合,该集合表示一个目录中的子目录的路径名称GetDirectoryInfo返回指定路径的DirectoryInfo对象GetDriveInfo返回指定路径的DriveInfo对象GetFiles返回一个只读String集合,该集合表示一个目录中的文件的名称。GetParentPath返回一个String,它表示所提供路径的父级绝对路径MoveDirectory移动目录RenameDirectory重命名目录