资源描述
每个程序几乎都要往磁盘上存储数据,这些数据可能是表格、图形、姓名和地址清单、或者是游戏的存储进度。很难想象一个大型的RPG游戏不允许游戏者存盘。这一章将学习关于存储文件的知识。
§1 文本文件
一、 生成文本文件,使用下列命令:
Open "Filename" For Output As #FileNumber
其中Open告诉Visual Basic生成一个新文件;Filename是文件名(可以包含路径);For Output表明文本文件要接受程序输出的数据;FileNumber是文件号(1-511之间),Visual Basic很傻,不知道文件名,它只认文件号,程序可能打开多个文件,如果你忘了该生成哪一号文件,你可以用FreeFile函数来得到一个文件号。如:
Dim Free As Integer
Free = FreeFile
Open "c:\abe.def" For Output As #Free
则生成文件c:\abe.def,Visual Basic替你找一个未用的文件号来代表它。
二、 打开已有的文本文件
Visual Basic不仅仅想知道你要打开文件,它还想知道你打开文件后想做什么。
1. 如果你想从文本文件中读取数据给计算机,则使用下面命令:
Open "Filename" For Input As #FileNumber
如果文件不存在,Visual Basic就会对你的玩笑表示生气,它会发出叫声,然后指出你的错误。
2. 如果你想把数据写到文本文件中,则使用下面命令:
Open "Filename" For Output As #FileNumber
快看这个命令和生成新文件的命令一样!你可以这样理解:如果Visual Basic找不到那个文件,那么它就生成一个新的,如果它找到了,就打开文件并准备向里面写东西。但是如果程序员向已存在的文件内写数据,那么将会把原来的数据覆盖掉。这可要小心!
3. 如果你想把数据追加写到文本文件中,则使用下面命令:
Open "Filename" For Append As #FileNumber
这种操作也是准备写数据到文本文件中,不过Visual Basic将把数据追加到文件的末尾。
三、 向文本文件中写数据
Print #FileNumber, "Text String"
将Text String字符串写入#FileNumber代表的文件中,写到什么地方取决于你打开文件的方式。For Output方式写到文件的开头,For Append方式写到文件的末尾。
四、 关闭文件
不论什么时候生成了文本文件或打开了已有的文本文件都要在程序终止前关闭它。否则,可能会出现一些问题,甚至把文件内的数据搞坏。
关闭所有打开的文件,可使用命令:Close
关闭特定的文件,可使用命令:Close #FileNumber
五、 从文本文件中读取数据
首先要用For Input方式打开文本文件,然后可将文件内容赋给一个字符串变量。由于在32位系统中,字符串的容量可达百兆,所以可以简单地把文件的内容赋给一个字符串变量。在16位的系统中读取大文件时,恐怕还要考虑内存的问题。
Dim FileContents As String
Open "Filename" For Input As #FileNumber
FileContents = Input(LOF(FileNumber), FileNumber)
Close #FileNumber
第三句就可以将文件的所有内容读入FileContents中,LOF函数用以去得文件的长度。
六、 改变文本文件的内容,这是很烦琐的过程,需用下面的步骤。
1. 打开文件。
2. 取出文件内容赋给一个变量。
3. 关闭文件。
4. 编辑变量内容。
5. 打开文件。
6. 变量存入文件。
7. 关闭文件。
§2 随机存取文件
文本文件就象盒式磁带机,因为如果你想读取后面的数据就得把前面的数据先放过去。随机存取文件就象CD,因为你可以立即跳至你想听的那一首歌。随机存取文件是以结构(Structure)来存取的,在文件里数据放在一个一个结构里,
每个结构里的数据是一样的。
一、 使用结构(Structure)保存信息
写程序时,也许要生成几个变量来保存信息。如要跟踪如下的信息:姓名、地址、年龄。可以为各信息生成单独的变量,如:
Dim Name As String
Dim Address As String
Dim Age As Integer
然而,Visual Basic看不出这些信息的关联之处,对Visual Basic来说这些信息散乱地堆放在内存中的某个地方,没有很好地组织起来。为了解决这个问题,Visual Basic使用叫做结构(Structure)的东西将分散的东西组织起来。在别的一些语言里这被称为记录类型。如下面的例子:
Type PersonRecord
Name As String
Address As String
Age As Integer
End Type
1. 生成结构
只能在代码窗口的声明区生成结构。即在Object列表框中选择(General),在Proc列表框中选择(declarations)后再输入结构。在窗体的声明区生成结构须加上Private关键字。
2. 定义变量为结果类型
Dim VariableName As StructureName
如上面的PersonRecord结构,可用下面的代码定义:
Dim Employees As PersonRecord
3. 赋值给结构中的数据
例如赋值给上面定义的Employees变量:
Employees.Name = "Tom"
Employees.Address = "1-107"
Employees.Age = 22
4. 取出结构中的数据
例如取出上面赋值过的Employees变量中的数据:
Who = Employees.Name
5. 随机存取文件里的结构
随机存取文件里有一个一个的结构,它们安静地象下面一样排列着:
Name
Address
Age
Name
Address
Age
二、 随机存取文件使用的重要变量
用一个变量代表你定义的结构,用一个变量跟踪现在的位置,再用一个变量表明最后一个结构的位置。
Dim Friends As FriendStructure
Dim Position As Long
Dim LastOne As Long
必须有一个变量来代表你定义的结构。
三、 生成和打开随机存取文件
Open "Filename" For Random As #FileNumber Len = StructureLength
看起来和生成和打开文本文件的语句差不多,如果Visual Basic找不到文件的话则Visual Basic就生成一个新的文件,如果找到的话就把旧文件打开。For Random告诉Visual Basic你想打开一个随机存取文件。#FileNumber还是文件号,你可以用FreeFile让Visual Basic替你选一个没有用过的文件号。StructureLength是你的结构的长度,如果你不知道的话,可以用Len函数来获得。如:
Dim StructureLength As Long
Dim Friends As PersonRecord ‘PersonRecord是一个结构名称
StructureLength = Len(PersonRecord)
四、 向随机存取文件写入数据
Put #FileNumber, Posetion, DataName
Put表明你想向由#FileNumber决定的随机存取文件里写入数据,Posetion是你想放置数据的位置。在随机存取文件里第一个结构放在位置1,第二个结构放在位置2,等等。需要知道的是:随机存取文件的写入和读出不需要以不同的方式打开文件,Open…For Random打开文件后既可以写入又可以读出,比文本文件方便多了。
下面是向文件的末尾增加数据的代码的示例,LastOne变量用于表明文件已存在多少结构:
Dim StructureName As StructureType ‘StructureType是一个结构的名字
Dim SLength As Long
Dim LastOne As Long
SLength = Len(StructureName)
Open "FileName" For Random As #FileNumber Len = SLength
LastOne = LOF(FileNumber) \ Slength ‘LOF函数返回FileNumber文件号代表的文件的长度
LastOne = LastOne + 1
Put #FileNumber, LastOne, StructureName
Close #FileNumber
下面是替换文件中结构的代码的示例:
Dim StructureName As StructureType ‘StructureType是一个结构的名字
Dim SLength As Long
SLength = Len(StructureName)
Open "FileName" For Random As #FileNumber Len = SLength
Put #FileNumber, Position, StructureName ‘Position是你想替换的结构的位置
Close #FileNumber
五、 从随机存取文件中读出数据
Dim GetData As StructureType ‘StructureType是一个结构的名字
Get #FileNumber, Position, GetData
这样就可以把#FileNumber代表的文件中的在Position位置上的数据读到GetData变量中。
六、 关闭文件
一定要在程序终止前关闭打开的文件。否则,可能会出现一些问题,甚至把文件内的数据搞坏。
关闭所有打开的文件,可使用命令:Close
关闭特定的文件,可使用命令:Close #FileNumber
§3 二进制文件
二进制文件并不是一种新的文件类型,而是操作任何种类文件的一种方法。二进制文件技术允许程序员修改文件中的任意字节。所以说,二进制文件技术是一种强有力的工具,但是强有力的工具往往必须小心使用。使用二进制文件可以操作许多文件类型,甚至直接读写图形文件等等。具体的实现方法请参考其他详细介绍的书籍。
一、 生成和打开二进制文件
Open "FileName" For Binary As #FileNumber
二、 从二进制文件中读出数据
GetData = Input(Number, #FileNumber)
以上命令从#FileNumber代表的文件中在当前位置上开始Number个字节的数据读到GetData变量中。
三、 定位文件的当前位置
Seek FileNumber, PositionNumber
以上命令将#FileNumber代表的文件的当前位置移到PositionNumber位置。
展开阅读全文