VB文件操作.docx

上传人:b****1 文档编号:14290324 上传时间:2023-06-22 格式:DOCX 页数:26 大小:46.99KB
下载 相关 举报
VB文件操作.docx_第1页
第1页 / 共26页
VB文件操作.docx_第2页
第2页 / 共26页
VB文件操作.docx_第3页
第3页 / 共26页
VB文件操作.docx_第4页
第4页 / 共26页
VB文件操作.docx_第5页
第5页 / 共26页
VB文件操作.docx_第6页
第6页 / 共26页
VB文件操作.docx_第7页
第7页 / 共26页
VB文件操作.docx_第8页
第8页 / 共26页
VB文件操作.docx_第9页
第9页 / 共26页
VB文件操作.docx_第10页
第10页 / 共26页
VB文件操作.docx_第11页
第11页 / 共26页
VB文件操作.docx_第12页
第12页 / 共26页
VB文件操作.docx_第13页
第13页 / 共26页
VB文件操作.docx_第14页
第14页 / 共26页
VB文件操作.docx_第15页
第15页 / 共26页
VB文件操作.docx_第16页
第16页 / 共26页
VB文件操作.docx_第17页
第17页 / 共26页
VB文件操作.docx_第18页
第18页 / 共26页
VB文件操作.docx_第19页
第19页 / 共26页
VB文件操作.docx_第20页
第20页 / 共26页
亲,该文档总共26页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

VB文件操作.docx

《VB文件操作.docx》由会员分享,可在线阅读,更多相关《VB文件操作.docx(26页珍藏版)》请在冰点文库上搜索。

VB文件操作.docx

VB文件操作

VB文件操作

(一)

2009年12月01日星期二12:

28

在程序设计中,文件是十分有用和不可缺少的。

由应用程序产生或处理过的数据,往往在应用程序结束以前仍需保留,或者为了存取方便,提高上机效率,需要将由输入设备输入的数据保存在存储介质上(如磁盘,磁带等)。

这些数据是以文件的方式保存在存储介质上的,需要读取数据时可以从外存储器调出,需要保存时可以由内存写到外存。

在程序中可直接对文件进行处理,可以保存、访问它所处理的数据,也可以使其它程序共享这些数据。

VB具有强大的文件处理能力,可以处理顺序文件、随即文件和二进制文件,同时提供了与文件处理有关的控件,也提供了大量与文件管理有关的语句、函数。

本章介绍文件的结构、三种文件类型、VB对文件和目录维护的主要语句和函数、VB程序对文件的操作方法(文件系统对象)。

6.1文件

在VB程序中,需要输入少量数据,可通过程序中直接赋值来完成,或通过输入函数以获取数据(如使用函数InputBox),但输入大量的数据时,这些方法易造成数据输入和数据存储不方便,在重复输入相同的数据时,易造成数据不一致。

鉴于这种情况,可以将这些大量的数据存储在一个或多个文件中,使用时再从相应的文件中读取。

通常情况下,计算机处理的大量数据都是以文件的形式存放在外部介质(如磁盘)上,操作系统也是以文件为单位对数据进行管理。

当访问外部介质上存储的数据时,先按文件名找到所需要的文件,再从该文件中读取相关数据;在外部介质中存入数据时,也必须先建立一个文件,才能向它写入数据。

在介绍文件结构和类型之前,简单介绍对文件命名的基本规则。

在VisualBasic中,文件说明的一般格式为:

设备名:

文件引用名

例如:

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)特殊字符:

$#&@!

%()_-|,^~/

VisualBasic窗体文件的扩展名为.frm,工程文件的扩展名为.vbp,标准模块文件的扩展名为.bas,可执行文件的扩展名为.exe,等等。

用户可使用自己的扩展名,但不要与系统使用的扩展名相矛盾。

完整的文件说明由设备名和文件引用名构成。

对于磁盘文件来说,还可以含有路径。

例如:

D:

\textfile\exercise.txt

..\grades.qtr

6.1.1文件的结构

为了有效地对数据进行存储和读取,文件中的数据必须以某种特定的格式存储,这种特定的格式就是文件的结构。

VisualBasic的文件由记录组成,记录由字段组成,字段又由字符组成。

1.字符(character):

是构成文件的最基本单位。

字符可以是数字、字母、特殊符号或单一

字节。

这里所说的“字符”一般为西文字符,一个西文字符用一个字节存放。

如果为汉字字符,包括汉字和“全角”字符,则通常用两个字节存放。

也就是说,一个汉字字符的存储大小相当于两个西文字符的存储大小。

一般把用一个字节存放的西文字符称为“半角”字符,而把汉字和用两个字节存放的字符称为“全角”字符。

注意,VisualBasic6.0支持双字节字符,当计算字符串长度时,一个西文字符和一个汉字都作为一个字符计算,但它们所占的内存空间是不一样的。

例如,字符串“VB程序设计语言”的长度为8,而所占的字节数为14。

2.字段(field):

也称域。

字段由若干个字符组成,用来表示一项数据。

例如邮政编码“450002”就是一个字段,它由6个字符组成;而姓名“张前”也是一个字段,它由2个汉字组成。

3.记录(record):

由一组相关的字段组成。

例如在通信录中,每个人的姓名、单位、地址、电话号码、邮政编码等构成一个记录。

4.文件(file):

文件由记录构成,一个文件含有一个以上的记录。

例如在通信录文件中有129个人的信息,每个人的信息是一个记录,129个记录构成一个文件。

例如,一居民区人员登记可整理一个二维表的形式,如表6-1所示。

在这个表中,每位居民的信息是一个记录,它由“身份证号”、“姓名”、“性别”、“籍贯”、“职业”、“联系方式”等6个数据项构成。

表6-1  居民区人员登记表(jmdjb.dat)

身份证号

姓名

性别

籍贯

职业

联系方式

101

小米

北京

企业主管

010

102

张明哲

上海

研究员

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=FreeFile

   Open"E:

\VB\Exercise.TXT"ForOutputAs#FileNumber

则在E盘VB文件夹下建立Exercise.TXT数据文件,文件号为FileNumber,如果这个文件已经存在,则原有文件被覆盖;如果执行下面的代码,

   FileNumber=FreeFile

   Open"E:

\VB\Exercise.TXT"ForAppendAs#FileNumber

也在E盘VB文件夹下建立Exercise.TXT数据文件,文件号为FileNumber,但当该文件已经存在时,新写入的数据追加到原有数据的后面。

●缓冲区大小:

当在文件与程序之间拷贝数据时,选项len参数指定缓冲区的字符数,其范围为1-32767,缺省值为512字节。

例如,执行下面的代码,

   Open"E:

\VB\Exercise.TXT"ForInputAs#1len=1024

则打开E盘VB文件夹下的数据文件Exercise.TXT,为读取数据作准备,与之关联的文件号为1,读写缓冲区为1024字节。

在程序中,获取文件名可通过【打开】文件或文件【另存为】对话框实现。

例如,下面的代码从【打开】文件对话框中打开一个文件,以便从该文件中读取数据:

CommonDialog1.Filter="AllFiles(*.*)|*.*|TextFiles(*.txt)|*.txt|BatchFiles(*.bat)|*.bat"

CommonDialog1.FilterIndex=2

CommonDialog1.ShowOpen

Filename=CommonDialog1.Filename

F=FreeFile

OpenFilenameForInputAsF

………

而下面的代码则从文件【另存为】对话框中输入文件名,以便建立从文件名框中输入或选定的文件:

CommonDialog1.Filter="AllFiles(*.*)|*.*|TextFiles(*.txt)|*.txt|BatchFiles(*.bat)|*.bat"

CommonDialog1.FilterIndex=2

CommonDialog1.ShowSave

Filename=CommonDialog1.Filename

F=FreeFile

OpenFilenameForOtputAsF

………

建立【打开】文件或文件【另存为】对话框用公共对话(CommonDialog)控件,见相关章节。

注意:

用公共对话控件可创建【打开】文件和文件【另存为】对话框,但它只能为建立和访问的文件输入文件名提供一个可视的界面,对话框本身不能完成打开文件和保存文件的功能,须编写代码完成。

2、关闭文件语句:

Close

语法格式为:

   Close[#文件号][,#文件号]……

该语句的功能是关闭指定的文件,释放缓冲区;若不指定文件号,则关闭所有打开的文件。

程序运行结束时,会自动关闭所有打开的文件,但对打开的文件完成操作后及时关闭该文件是个好习惯,不仅节约内存,也避免意外情况丢失数据。

程序运行时将写入文件的数据均放在文件读写缓冲区,待整批写入文件。

6.2.2顺序文件的写操作

要将程序中的数据写到一个顺序文件,先打开文件以进行顺序输出或添加(注意此时的选用打开方式,选择Output则覆盖原来文件,选择Append则在原来文件后添加数据),可用下面的命令语句写入数据。

1、Print#语句:

用于为顺序文件写入数据

语法格式为:

   Print#文件号[,输出项表]

其中输出项表是要输出的表达式或表达式列表,输出格式同Print方法。

例如,下面的代码在E盘VB文件夹下建立Exercise.TXT数据文件,并往文件中输入字符,最后关闭文件:

Open"E:

\VB\Exercise.TXT"ForOutputAs#1‘打开文件以便输出

Print#1,”顺序文件写入数据测试”           ‘向文件中写入字符串”Thisisatest”

Print#1,                                 ‘输出一个空行

Print#1,”Zone1”;Tab;”Zone2”              ‘在两个打印区输出

Print#1,Spc(5);”5leadingspaces”             ‘先输出5个空格,再输出字符串

Print#1,Tab(10);”Hello”                     ‘在第10列上输出字符串

Close#1                                  ‘关闭文件

下面的代码把文本框Text1中的内容写到一个顺序文件:

Exercise.TXT,存放于D:

\:

Open"D:

\Exercise.TXT"ForOutputAs#2

Print#2,Exercise.Text

Close#2

2、Write#语句:

将记录写入文件

语法格式为:

  Write#文件号[,表达式列表]

该语句适用于向划分了字段的记录格式的文件写入数据。

“表达式表”中的每个表达式写入一个字段,一个Write#语句一次写入一个记录。

表达式表中包含多个表达式时以逗号分隔。

缺省表达式时写入一个空行。

用Write#语句写入的数据各个字段间自动加逗号分隔符,字符型数据自动加双引号定界符,记录尾自动加回车换行符。

例如,用Write#建立由表6-2给出的居民区人员登记表:

表6-2  居民区人员登记表(jmdjb.dat)

身份证号

姓名

性别

年龄

出生年月

101

小米

24

11/1/1980

102

张明哲

6

3/4/1998

………

………

………

………

………

999

张前

1

10/6/2003

代码如下:

Dimsfzh(3)AsString,xm(3)AsString,xb(3)AsString,nl(3)AsInteger,csny(3)AsDate

sfzh

(1)="101":

xm

(1)="小米":

xb

(1)="女":

nl

(1)=24:

csny

(1)=#11/1/1980#

sfzh

(2)="102":

xm

(2)="张明哲":

xb

(2)="女":

nl

(2)=6:

csny

(2)=#3/4/1998#

sfzh(3)="999":

xm(3)="张前":

xb(3)="男":

nl(3)=1:

csny(3)=#10/6/2003#

Open"jmdjb.dat"ForOutputAs#1               '建立文件

Write#1,"身份证号","姓名","性别","年龄","出生年月"   '写入表头

Fori=1To3                              '利用循环语句写入多条记录

Write#1,sfzh(i),xm(i),xb(i),nl(i),csny(i)   '写入第i个记录

Next

Close#1

图6-1jmdjb.dat文件

执行上面代码建立的jmdjb.dat文件的格式如图6-1所示。

6.2.3顺序文件的读操作

对于用Input方式打开的顺序文件,可用下面的语句或函数从文件中读取数据。

1、LineInput语句:

把文件中的一行读到一个字符串变量中

语法格式为:

   LineInput#文件号,字符串变量

该语句将文件的一整行逐个字符地读到指定变量中,遇到回车符或换行符结束,但变量中不包括回车符或换行符。

读完后,文件指针指向下一行的第一个字符,下一个LineInput语句将读取当前指针指向的那一行数据。

对于没有划分字段的文本文件,一行指从文件开头或回车换行符到下一个回车换行符之间的部分;对于划分了字段的表,一行即一个记录,包括分隔符和定界符,如空格、逗号、双引号等均作为有效字符读到变量中。

例如,设TEST.TXT文本文件已存在D:

\下,则执行下面的代码将整个文件输出到一个图片框中:

Open"D:

\TEST.TXT"ForInputAs#4

DoWhileNotEOF(4)         ’EOF为文尾测试函数

LineInput#4,TextLine      ’将读入的一行存到变量TextLine中

Picture1.PrintTextLine      ’在Picture1中输出变量TextLine

Loop

Close#4

请读者思考:

如何将文件中的内容按行显示在文本框中?

2.Input函数:

从一个打开的顺序文件中返回指定个数的字符

语法格式为:

   Input(读取的字符个数,[#]文件号)

该函数读取文件中的任何字符,包括回车换行符。

调用该函数后,移动文件指针到下一个读取位置。

例如,用Input函数把上例中的文件一次读一个字符地显示在文本框中。

代码如下:

Open"D:

\TEST.TXT"ForInputAs#6

DoWhileNotEOF(6)

TextVar=TextVar+Input(1,#6)’先把读入的字符存放到变量TextVar中

Loop

Close#6

Text1.Text=TextVar

3.Input#语句:

用于从打开的顺文件中读取数据赋值给指定的变量

语法格式为:

   Input#文件号,变量表

该语句用于读取文件中的数据,以字段为单位,读取后依次赋值给变量表中的变量。

变量表中有多个变量时以逗号分隔。

使用该语句时,变量表中的变量个数应和文件中的每条记录划分的字段数相同,类型应匹配,即一次应读出一整条纪录。

读出的数据不包括字符串字段的定界符和字段之间的分隔符。

为了正确地从打开的文件读取数据到变量中,文件中的数据应该是用Write#语句写入(而不是用Print#语句),这样可保证每个字段被正确分界。

例1:

(见例子:

文件-程序读写数据)举例说明如何打开、保存文件,以及如何在文件中追加数据。

各控件及其属性如图6-2、表6-3所示。

表6-3各对象对应属性的属性值

默认名称

Form1

Text1

Command1

Command2

Command3

CommonDialog1

Picture1

Name

Rwf

TxtEdit

Cmdread

Cmdwrite

CmdAppend

Commondlg

Picture1

Caption

file(Read-write)

(空)

Read

Write

Append

(无)

(无)

代码如下:

rem利用打开文件对话框打开并读取文件

PrivateSubCmdread_Click()

   Picture1.Cls:

TxtEdit.Text=""

   CommonDlg.Filter="allfile(*.*)|*.*|textfile(*.txt)|*.txt|batchfile(*.bat)|*.bat"

   CommonDlg.FilterIndex=2

   CommonDlg.ShowOpen

   FileName=CommonDlg.FileName

   f=FreeFile

   OpenFileNameForInputAs#f

   DoWhileNotEOF(f)

       LineInput#f,textline

       Picture1.Printtextline

       TxtEdit.Text=TxtEdit.Text+textline+Chr(13)+Chr(10)

   Loop

   Close#f

EndSub

Rem利用另存为对话框保存文件

PrivateSubCmdwrite_Click()

   CommonDlg.Filter="allfile(*.*)|*.*|textfile(*.txt)|*.txt|batchfile(*.bat)|*.bat"

   CommonDlg.FilterIndex=2

   CommonDlg.ShowSave

   FileName=CommonDlg.FileName

   f=FreeFile

   OpenFileNameForOutputAs#f

   Print#f,TxtEdit.Text

   Close#f

EndSub

Rem在Out.txt文件中追加数据

PrivateSubCmdAppend_Click()

putdata"out.txt","abcdfghijklmn

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2