VB文件操作
VB教程第8章-文件操作

8.2 文件的打开与关闭
8.2.1 文件的打开
8.2.2 文件的关闭
返回
退出
8.2.1 文件的打开
在VB中,使用Open语句打开或建立文件,为文件的输入输出分 配缓冲区,并确定缓冲区所使用的存取方式,其语法格式为:
Open 文件说明 [For方式] [Access存取类型] [锁定] As [#]文件号 [Len=记录长度]
以下是使用Open 语句的不同用法来实现文件的输出与输入的范例。
(1) 以顺序输入模式打开 client1文件,若要以其他方式打开文件,必须先关闭文件。 Open "client1" For Input As # 1 (2)以只写的二进制方式打开文件。若要以其他方式打开文件,必须先关闭此文件。 Open "client1" For Binary Access Write As #1 (3)下列代码以随机方式打开client1文件,文件中含有用户自定义数据类型 Record 的 记录。若要以其他方式打开文件,必须先关闭此文件。 Type Record ' 定义用户自定义数据类型。 clientID As Integer clientName As String * 16 End Type Dim MyRecord As Record ' 声明变量。 Open "client1" For Random As # 1 Len = Len(MyRecord) (4)下列代码以顺序输出方式打开文件,任何过程都可以读写该文件。若要以其他方式 打开文件,必须先关闭此文件。 Open "client1" For Output Shared As # 1 (5)下列代码以只读的二进制方式打开文件;其他过程不可以读该文件。 Open "client1" For Binary Access Read Lock Read As # 1 (6)用随机方式打开C盘上clients文件夹下的client1文件,记录长度为512字节。 Open "c:\clients\client1" For Random As # 1 Len = 512
VB语言程序设计教程第09章 文件操作

(1)常用于读取用Write#语句生成的顺序文件中的数据。 (2)在读取数据时,如果已到达文件末尾,继续读会被终止并 产生一个错误;为了避免出错,常在读操作前用Eof函数检 测是否已经到达文件末尾。
15
9.2 顺序文件的存取
【例9-2】读取并显示输出上例建立的通信录。
16
9.2 顺序文件的存取
(1)文件指针:文件打开后,系统会自动生成一个文件指针(
隐含),文件的读写就是从这个指针的位置开始的。 (2)Lof 函数:返回指定文件的字节数,即文件长度。如果返 回0值,则表示空文件。 (3)Loc 函数:对于随机文件,返回最近从文件读取或写入文 件的记录号; (4)Eof 函数: 用来测试文件指针是否指向文件末尾,如果指
5
9.2 顺序文件的存取
9.2.1 顺序文件的打开与关闭
1.打开文件
格式:Open <文件名> For <打开方式> As [#]<文件号> 说明: (1)文件名:一个字符串,表示要打开的文件名称,包括路径。 (2)打开方式:可以取 Input、Output、Append三种之一。
ቤተ መጻሕፍቲ ባይዱ
①Input:为读操作打开文件。要打开的文件必须存在。 ②Output:为写操作打开文件。要打开的文件如果不存在, 将创建该文件;如果已经存在,将覆盖该文件。 ③Append:向文件中追加数据。若文件不存在,则新建;若 存在,所添加的数据将存放到原来的数据的后面。
2.Line Input #语句
3
9.1 文件的基本概念
表9-1 文件结构举例
4
9.1 文件的基本概念
2.文件的访问类型
在Visual Basic中,有3种文件访问的类型。
第七章 VB中的文件操作

第七章VB中的文件操作7.1文件系统控件1.文件系统控件种类(1)驱动器列表框(DriveListBox):用来显示当前机器上的所有盘符(2)目录列表框(DirListBox):用来显示当前盘上的所有文件夹(3)文件列表框(FileListBox):用来显示当前文件夹下的所有文件名2.重要属性3.重要事件7.2文件的读写1.文件的有关概念记录:计算机处理数据的基本单位,由若干个相互关联的数据项组成。
相当于表格中的一行。
文件:记录的集合,相当于一张表。
文件类型:顺序文件、随机文件、二进制文件。
访问模式:计算机访问文件的方式,VB中有顺序、随机、二进制三种访问模式。
2.顺序访问模式顺序访问模式的规则最简单,指读出或写入时,从第一条记录“顺序”地读到最后一条记录,不可以跳跃式访问。
该模式专门用于处理文本文件,每一行文本相当于一条记录,每条记录可长可短,记录与记录之间用“换行符”来分隔。
顺序文件的写入步骤:打开、写入、关闭;读出步骤:打开、读出、关闭。
(1)打开文件打开文件的命令是Open,格式为:Open“文件名”For模式 As [#] 文件号[Len=记录长度]说明:1)文件名可以是字符串常量也可以是字符串变量2)模式可以是下面之一:OutPut:打开一个文件,将对该文件进行写操作Input:打开一个文件,将对该文件进行读操作Append:打开一个文件,将在该文件末尾追加记录3)文件号是一个介于1-511之间的整数,打开一个文件时需要指定一个文件号,这个文件号就代表该文件,直到文件关闭后这个号才可以被其他文件所使用。
可以利用FreeFile()函数获得下一个可以利用的文件号。
例:Open "D:\sj\aaa" For Output As #1意思是:打开D:\SJ下aaa文件供写入数据,文件号为#1(2)写操作将数据写入磁盘文件所用的命令是:Write# 或Print#。
语法格式:1) Print #文件号,[输出列表]例:Open “D:\SJ\TEST.DAT”For Output As #1Print #1,Text1.Text '把文本框的内容一次性写入文件Close #12)Write #文件号,[输出列表]其中的输出列表一般指用逗号,分隔的数值或字符串表达式。
vb6的文件操作

总结一下VB6的文件操作,省得要用的时候又到处查找。
一、文件类型1、顺序文件(文本文件):以ASCII码形式存放的文件。
似乎还有Unicode码存放的,有没有BCD码的呢?2、随机访问文件:这种文件格式很有特点:文件中存放若干条等长的单元(也可以说是记录);每个单元包含同类型、等数量、等长度的数据项;文件中,除了字符串以ASCII码存放之外,其它都以二进制形式直接存放,节省存储空间。
这种文件类型非常适合存储需要和软件交互的数据,如结构体数据、类数据等。
这也是VB特有的文件访问方式。
3、二进制文件:以二进制形式存放,PE程序文件一般都是这个类型。
二、操作方法1、顺序文件打开:Open 文件名For Input | Output | Append As [#]文件号Input打开读入,文件不存在报错。
Output打开覆盖写入,文件不存在则创建。
Append打开追加写入,文件不存在则创建。
读:Line Input #文件号, 字符串变量读一行数据存入字符串变量,数据包括空格、Tab、等,不包括回车符和换行符,所以要显示文件的换行效果,要手动添加回车符和换行符(vbCrLf)Input #文件号, 变量1[, | ;] [变量2]...这种方式可以存入多个变量,而且变量类型不限于字符串型。
写:Print #文件号, 参数1[, | ;] [参数2]...将各参数逐个写入文件。
参数间用逗号隔开时,文件中相应插入多个空格;用分号隔开时,插入一个空格。
可以用Spc(n)、Tab(n)等进行排版。
Write #文件号, 参数1[, | ;] [参数2]...这种写入方式将自动添加界定符,对不同参数的类型加以界定。
2、随机访问文件打开:Open 文件名[For Random] As [#]文件号Len = 记录长度 For Random可以省略,文件不存在则创建,读写都是这种打开方式。
Len是文件中记录的一条长度,用以识别记录的开始与结束,经常用Len(记录名)来获取长度。
VB操作文件夹的几个方法

VB操作文件夹的几个方法****************移动文件夹************************1、添加引用"microsoft scripting runtime"2、使用方法Option ExplicitPrivate Sub Form_Load()Dim FileSys As New FileSystemObjectDim FolderObj As FolderSet FileSys = CreateObject("scripting.filesystemobject" )FileSys.CopyFile "c:/ss.txt", "d:/mm.txt", True'拷贝文件FileSys.CopyFolder "c:/1", "d:/2", True'拷贝文件夹End sub***************新建文件夹**************************Dim fso As New FileSystemObject, fdr As Folder,fdr Path as StringfdrPath="C:/newfolder"fdr = fso.CreateFolder(fdrPath)***************重命名文件夹***************Dim aa As New Scripting.FileSystemObjectaa.MoveFolder "c:/1", "c:/2"**************************************************fileName = "c:/dzh/export/1001A1AA.XLS"If Dir(fileName) = "" Then '文件存在sWenJJ_MingC = "000001"ElsesWenJJ_MingC = "000002"End IfpathName = "c:/dzh/dataFX/" & sWenJJ_MingCfso.MoveFolder "c:/dzh/export", pathName '文件夹剪切,重命名fso.CreateFolder "c:/dzh/export" '新建文件夹使用Dir后再使用fso.MoveFolder会产生错误!If fso.FileExists(fileName) = False ThensWenJJ_MingC = "000001"ElsesWenJJ_MingC = "000002"End If改为以上代码判断文件是否存在即可解决问题。
VB第12章 文件操作2h

9of 35
3、 从顺序文件中读取数据
• 首先用 For Input 方式打开顺序文件。 • 使用 Line Input #、Input # 语句或Input()函数将文件读到程 序变量中。 • Line Input #语句,读一行给变量,语法: Line Input #FileNumber,字符串变量 以下代码段逐行读取一个文件:
4、 随机存取文件关闭
• 与顺序文件关闭方式一样。 –关闭所有打开的文件,可使用命令: Close – 关闭特定的文件,可使用命令: Close #FileNumber
20of 35
随机存取文件举例
• 添加一个窗体,定义 Private Type student name As String * 8 lesson As String * 8 score As Integer End Type • 画两个按钮 ,Command1 代码: Dim a As student length = Len(a) Open "d:\abc.txt" For Random As #12 Len = length = “刘” :a.lesson = “数学” :a.score = 87 Put #12, 1, a = “张” :a.lesson = “计算机” : a.score = 92 Put #12, 2, a Close 12
10of 35
从顺序文件中读取数据
• Input #语句: Input # FileNumber,变量表 • Input()函数 • 例子: Dim FileContents As String Open "Filename" For Input As #FileNumber FileContents=Input(LOF(FileNumber),FileNumber) Close #FileNumber • 第三句就可以将文件的所有内容读入FileContents中,LOF函 数用以取得文件的长度。
[VB.NET]文件操作
![[VB.NET]文件操作](https://img.taocdn.com/s3/m/3c8e3d56ce84b9d528ea81c758f5f61fb73628e5.png)
[]文件操作文件操作实例说明在本实例中,我们制作一个能够对文件进行操作的应用程序。
程序运行后,可以新建一个文件和删除一个文件;同时可以显示文件的属性如文件类型、建立时间、更改时间和访问时间等。
还可以更改这些属性。
程序运行结果如图89-1所示。
图89-1 运行结果<script type="text/javascript" src="/pagead/show_ads.js"> </script>技术要点l 新建和删除文件l 获得文件属性l 更改文件属性实现过程■ 新建项目打开Visual ,选择"新建项目",在项目类型窗口中选择"Visual Basic项目",在模板窗口中选择"Windows应用程序",在名称域中输入"FileOperate",然后选择保存路径。
单击"确认"。
■ 添加控件在窗体上添加六个Button控件,一个GroupBox控件,并在GroupBox控件上放置八个Label控件。
■ 更改属性将说明性的Label控件和Button控件的Text属性设置为和界面一致。
其余属性保持不变。
■ 添加代码Dim fileexam As System.IO.File'新建文件Private Sub Button1_Click(ByVal sender As System.Object,ByVal e As System.EventArgs) Handles Button1.ClickIf fileexam.Exists("c:/abc.txt") = True ThenMsgBox("这个文件已经存在了!")Exit SubEnd Iffileexam.Create("c:/abc.txt")MsgBox("成功建立文件!")Button3.Enabled = TrueEnd Sub'删除文件Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.ClickIf fileexam.Exists("c:/abc.txt") = True Thenfileexam.Delete("c:/abc.txt")MsgBox("成功删除文件!")Button3.Enabled = FalseElseMsgBox("这个文件不存在")End IfEnd Sub'得到文件的相关信息Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.ClickLabel1.Text = fileexam.GetAttributes("c:/abc.txt").ToStringLabel2.Text = fileexam.GetCreationTime("c:/abc.txt").ToStringLabel3.Text = fileexam.GetLastWriteTime("c:/abc.txt").ToStringLabel4.Text = fileexam.GetLastAccessTime("c:/abc.txt").ToStringEnd Sub'更改文件的属性(只读、隐藏、系统或文档)Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Clickfileexam.SetAttributes("c:/abc.txt",IO.FileAttributes.ReadOnly)End Sub'更改文件的建立时间Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Clickfileexam.SetCreationTime("c:/abc.txt", Now)End Sub'更改最后访问时间Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Clickfileexam.SetLastAccessTime("c:/abc.txt", Now)End Sub■ 运行程序单击菜单"调试|启动"或单击图标运行程序。
vb6.0文件操作函数

vb6.0文件操作函数CloseHandle 关闭一个内核对象。
其中包括文件、文件映射、、线程、安全和同步对象等CompareFileTime 对比两个文件的时间CopyFile 复制文件CreateDirectory 创建一个新目录CreateFile 打开和创建文件、管道、邮槽、服务、设备以及控制台CreateFileMapping 创建一个新的文件映射对象DeleteFile 删除指定文件DeviceIoControl 对设备执行指定的操作DosDateTimeT oFileTime 将DOS日期和时间值转换成一个win32FILETIME值FileTimeToDosDateTime 将一个win32FILETIME值转换成DOS 日期和时间值FileTimeToLocalFileTime 将一个FILETIME结构转换成本地时间FileTimeToSystemTime 根据一个FILETIME结构的内容,装载一个SYSTEMTIME结构FindClose 关闭由FindFirstFile函数创建的一个搜索句柄FindFirstFile 根据文件名查找文件FindNextFile 根据调用FindFirstFile函数时指定的一个文件名查找下一个文件FlushFileBuffers 针对指定的文件句柄,刷新内部文件缓冲区FlushViewOfFile 将写入文件映射缓冲区的所有数据都刷新到磁盘GetBinaryType 判断文件是否可以执行GetCompressedFileSize 判断一个压缩文件在磁盘上实际占据的字节数GetCurrentDirectory 在一个缓冲区中装载当前目录GetDiskFreeSpace 获取与一个磁盘的组织有关的,以及了解剩余空间的容量GetDiskFreeSpaceEx 获取与一个磁盘的组织以及剩余空间容量有关的GetDriveType 判断一个磁盘驱动器的类型GetExpandedName 取得一个压缩文件的全名GetFileAttributes 判断指定文件的属性GetFileInformationByHandle 这个函数提供了获取文件的一种机制GetFileSize 判断文件长度GetFileTime 取得指定文件的时间GetFileType 在给出文件句柄的前提下,判断文件类型GetFileVersionInfo从支持版本标记的一个模块里获取文件版本GetFileVersionInfoSize 针对包含了版本资源的一个文件,判断容纳文件版本需要一个多大的缓冲区GetFullPathName 获取指定文件的完整路径名GetLogicalDrives 判断系统中存在哪些逻辑驱动器字母GetLogicalDriveStrings 获取一个字串,其中包含了当前所有逻辑驱动器的根驱动器路径GetOverlappedResult 判断一个重叠操作当前的状态GetPrivateProfileInt 为初始化文件(.ini文件)中指定的条目获取一个整数值GetPrivateProfileSection 获取指定小节(在.ini文件中)所有项名和值的一个列表GetPrivateProfileString 为初始化文件中指定的条目取得字串GetProfileInt 取得win.ini初始化文件中指定条目的一个整数值GetProfileSection 获取指定小节(在win.ini文件中)所有项名和值的一个列表GetProfileString 为win.ini初始化文件中指定的条目取得字串GetShortPathName 获取指定文件的短路径名GetSystemDirectory 取得系统目录(即System目录)的完整路径名GetTempFileName 这个函数包含了一个临时文件的名字,它可由应用程序使用GetTempPath 获取为临时文件指定的路径GetVolumeInformation 获取与一个磁盘卷有关的GetWindowsDirectory 获取Windows目录的完整路径名hread 参考lreadhwrite参考lwrite函数lclose 关闭指定的文件lcreat 创建一个文件llseek 设置文件中进行读写的当前位置LockFile 锁定文件的某一部分,使其不与其他应用程序共享LockFileEx 与LockFile相似,只是它提供了更多的功能lopen 以二进制模式打开指定的文件lread 将文件中的数据读入内存缓冲区lwrite 将数据从内存缓冲区写入一个文件LZClose 关闭由LZOpenFile或LZInit函数打开的一个文件LZCopy 复制一个文件LZInit 这个函数用于初始化内部缓冲区LZOpenFile 该函数能执行大量不同的文件处理,而且兼容于压缩文件LZRead 将数据从文件读入内存缓冲区LZSeek设置一个文件中进行读写的当前位置MapViewOfFile 将一个文件映射对象映射到当前应用程序的地址空间MoveFile 移动文件OpenFile 这个函数能执行大量不同的文件操作OpenFileMapping 打开一个现成的文件映射对象QueryDosDevice 在中,DOS设备名会映射成NT系统设备名。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
VB文件操作(一)2009年12月01日星期二 12:28在程序设计中,文件是十分有用和不可缺少的。
由应用程序产生或处理过的数据,往往在应用程序结束以前仍需保留,或者为了存取方便,提高上机效率,需要将由输入设备输入的数据保存在存储介质上(如磁盘,磁带等)。
这些数据是以文件的方式保存在存储介质上的,需要读取数据时可以从外存储器调出,需要保存时可以由内存写到外存。
在程序中可直接对文件进行处理,可以保存、访问它所处理的数据,也可以使其它程序共享这些数据。
VB具有强大的文件处理能力,可以处理顺序文件、随即文件和二进制文件,同时提供了与文件处理有关的控件,也提供了大量与文件管理有关的语句、函数。
本章介绍文件的结构、三种文件类型、VB对文件和目录维护的主要语句和函数、VB程序对文件的操作方法(文件系统对象)。
6.1 文件在VB程序中,需要输入少量数据,可通过程序中直接赋值来完成,或通过输入函数以获取数据(如使用函数InputBox),但输入大量的数据时,这些方法易造成数据输入和数据存储不方便,在重复输入相同的数据时,易造成数据不一致。
鉴于这种情况,可以将这些大量的数据存储在一个或多个文件中,使用时再从相应的文件中读取。
通常情况下,计算机处理的大量数据都是以文件的形式存放在外部介质(如磁盘)上,操作系统也是以文件为单位对数据进行管理。
当访问外部介质上存储的数据时,先按文件名找到所需要的文件,再从该文件中读取相关数据;在外部介质中存入数据时,也必须先建立一个文件,才能向它写入数据。
在介绍文件结构和类型之前,简单介绍对文件命名的基本规则。
在Visual Basic 中,文件说明的一般格式为:设备名:文件引用名例如: D:myfile.abc这里的“D:”是设备名,而"myfile.abc”是文件引用名。
设备名是存放文件的设备的名称,如磁盘、磁带、打印机等。
在微机中,存放文件的主要设备是磁盘,其名称通常为A:,B:,C:,D:等,分别代表A,B,C,D等驱动器。
在DOS环境下,文件引用名由两部分组成,即文件基本名和扩展名。
其中文件基本名常以字母开头,最多不超过8个字符;扩展名是可选的,最多不超过3个字符;在文件基名和扩展名之间有一个圆点。
通常把这种文件名称为“8.3”格式。
如上例中的“myfile.abc”在Windows中可以使用长文件名,其长度最多不超过255个字符,并能自动维护传统的“8.3”格式的文件名。
下列字符可用做文件基本名和扩展名:(1)英文字母:a~z、A~Z(2)数字:0~9(3)特殊字符:$ # & @ ! % ( ) _ - | ,^ ~ /Visual Basic窗体文件的扩展名为.frm,工程文件的扩展名为.vbp,标准模块文件的扩展名为.bas,可执行文件的扩展名为.exe,等等。
用户可使用自己的扩展名,但不要与系统使用的扩展名相矛盾。
完整的文件说明由设备名和文件引用名构成。
对于磁盘文件来说,还可以含有路径。
例如:D:\textfile\exercise.txt..\grades.qtr6.1.1 文件的结构为了有效地对数据进行存储和读取,文件中的数据必须以某种特定的格式存储,这种特定的格式就是文件的结构。
Visual Basic的文件由记录组成,记录由字段组成,字段又由字符组成。
1.字符(character):是构成文件的最基本单位。
字符可以是数字、字母、特殊符号或单一字节。
这里所说的“字符”一般为西文字符,一个西文字符用一个字节存放。
如果为汉字字符,包括汉字和“全角”字符,则通常用两个字节存放。
也就是说,一个汉字字符的存储大小相当于两个西文字符的存储大小。
一般把用一个字节存放的西文字符称为“半角”字符,而把汉字和用两个字节存放的字符称为“全角”字符。
注意,VisualBasic 6.0支持双字节字符,当计算字符串长度时,一个西文字符和一个汉字都作为一个字符计算,但它们所占的内存空间是不一样的。
例如,字符串“VB程序设计语言”的长度为8,而所占的字节数为14。
2.字段(field):也称域。
字段由若干个字符组成,用来表示一项数据。
例如邮政编码“450002”就是一个字段,它由6个字符组成;而姓名“张前”也是一个字段,它由2个汉字组成。
3.记录(record):由一组相关的字段组成。
例如在通信录中,每个人的姓名、单位、地址、电话号码、邮政编码等构成一个记录。
4.文件(file):文件由记录构成,一个文件含有一个以上的记录。
例如在通信录文件中有129个人的信息,每个人的信息是一个记录,129个记录构成一个文件。
例如,一居民区人员登记可整理一个二维表的形式,如表6-1所示。
在这个表中,每位居民的信息是一个记录,它由“身份证号”、“姓名”、“性别”、“籍贯”、“职业”、“联系方式”等6个数据项构成。
表6-1 居民区人员登记表(jmdjb.dat)身份证号姓名性别籍贯职业联系方式101 小米女北京企业主管010102 张明哲女上海研究员021 ………………………………………………129 张前男香港公务员852读者可以根据以上定义分别找出各记录的数据信息。
需要注意的是:其中有一个字段称为“关键字”,能够唯一的识别出对应的记录,如表6-1中的“身份证号”字段。
6.1.2 文件的种类和存取类型VB有三种文件:顺序文件、随机文件和二进制文件。
存取一个文件时,可根据文件所含数据类型的不同,采用不同的存取方式,对应的文件存取类型有顺序存取、随机存取和二进制存取。
● 顺序文件:存入一个顺序文件时,依序把文件中的每个字符转换为相应的ASCII码存储;读取数据时必须从文件的头部开始,按文件写入的顺序,一次全部读出。
不能只读取它中间的一部分数据。
用顺序存取方式形成的文件称为顺序文件,顺序存取方式规则最简单。
顺序存取方式适合以整个文件为单位存取的场合。
主要用于文本文件,也最适合于文本文件,因为处理文本数据时,都是整篇文章调出来修改,然后再整篇文章重新保存,很少有只调出第几行,修改后再存回第几行的情况。
采用顺序存取方式的例子很多,如Windows的记事本、书写器等。
顺序文件也可以记录为单位,每个记录也可划分为若干个字段,但这样的数据结构一般不按顺序方式存取。
● 随机文件:随机存取的文件由一组固定长度的记录组成,每条记录分为若干个字段,每个字段的长度固定,可以有不同的数据类型。
一般用自定义数据类型来建立这些记录。
用随机存取方式形成的文件称为随机文件。
随机文件中每个记录有一个记录号,通过指定记录号,可随机地访问每一笔数据,不象顺序文件那样必须按顺序存取。
随机文件适合于以记录为单位存取的场合。
● 二进制文件:二进制存取方式可以存储任意希望存储的数据。
它与随机文件很类似,但没有数据类型和记录长度的限制。
用二进制存取方式形成的文件称为二进制文件。
在随机文件中,有些字符型字段不同记录的长度相差很多,但为了使最长的字符串能够存入,就必须把该字段的长度说明为最长字符串的长度,这样就会浪费了大量的存储空间。
为了节省存储空间,可以使用二进制存取文件。
对二进制文件,在TYPE类型说明中先不说明长度,待字符串存入时,再计算字符串长度,并用2个字节保存这个长度;读取数据时,先读取长度,再读取字符。
因而在记录长度变动较大的情况,用二进制存取方式可节约存储空间。
但另一方面,因为它没有固定长度的记录,不能向随机文件那样任意取出第几条记录,必须建立一个索引表来指示每个记录的起始地址,这就给编程带来了困难。
然而VB在其发展的过程中,已有了强大的数据库功能,可利用Data控件、ADO 数据控件等使应用程序与数据库连接,从而方便地对数据来回读写,完全可以代替文件直接访问的功能(可参看有关“VB与数据库连接”章节内容)。
6.2 顺序文件在对使用旧文件或创建新文件前,首先要说明文件存储位置和名字,并指定对文件的处理方式,即指要确定对文件操作的有关属性的属性值。
无论用哪种存取方式对数据文件进行操作,都必须先打开文件,然后向文件中写入或读出数据,最后关闭文件。
访问一个顺序文件时,通常是三个步骤:打开文件(若此文件不存在,则要建立一个新的文件)、读取/写入数据、关闭文件。
6.2.1 顺序文件的打开与关闭1.打开文件语句:Open语法格式如下:Open <文件名> For <打开方式> As # <文件号> [ Len = 缓冲区大小 ] 其中:●Open、For、As、Len等是VB关键字。
●文件名:指定打开的文件名(文件名用字符串表示),包括盘符、路径、文件主名及扩展名。
例如:”E:\MF\Test.txt”。
●打开方式方式:指定文件的打开方式,打开文件后,只能按指定的方式进行一种操作。
打开一个顺序文件有三种方式可选:◆Input:打开文件后,从文件中读取数据◆Output:打开文件后,向文件中写入数据,即重写一个顺序文件◆Append:打开文件后,向文件末尾添加数据若指定Input方式,则当指定文件不存在时产生一个错误;若指定Output或Append方式,则当文件不存在时建立该文件,文件已存在时写入的数据,前者覆盖,后者追加。
所以Open具有建立和打开文件的双重功能。
对同一文件用一种方式打开后,在关闭之前,不能再以另一种方式打开。
●文件号:VB应用程序每打开一个文件,必须指定一个文件号,且不能与其它打开的文件占用的文件号重复。
文件号的范围是1 - 511之间的整数。
打开文件后,指定的文件号就与该文件相关联,程序通过文件号来对文件进行读、写操作,直到关闭文件。
关闭文件后,该文件号被释放,可供打开其他文件时使用。
如果在程序中已打开多个文件(此时占用的文件号未必连续),则再打开文件时,为了避免文件号重复,可使用FreeFile函数,该函数返回当前程序未被占用的最小的文件号,可通过把函数值赋给一个变量来取得这个文件号。
例如,执行下面的代码,FileNumber = FreeFileOpen "E:\VB\Exercise.TXT" For Output As # FileNumber则在E盘VB文件夹下建立Exercise.TXT数据文件,文件号为FileNumber,如果这个文件已经存在,则原有文件被覆盖;如果执行下面的代码,FileNumber = FreeFileOpen "E:\VB\Exercise.TXT" For Append As # FileNumber也在E盘VB文件夹下建立Exercise.TXT数据文件,文件号为FileNumber,但当该文件已经存在时,新写入的数据追加到原有数据的后面。
●缓冲区大小:当在文件与程序之间拷贝数据时,选项len参数指定缓冲区的字符数,其范围为1 - 32767,缺省值为512字节。