第6章 文件管理.docx

上传人:b****2 文档编号:22989700 上传时间:2023-04-29 格式:DOCX 页数:35 大小:124.16KB
下载 相关 举报
第6章 文件管理.docx_第1页
第1页 / 共35页
第6章 文件管理.docx_第2页
第2页 / 共35页
第6章 文件管理.docx_第3页
第3页 / 共35页
第6章 文件管理.docx_第4页
第4页 / 共35页
第6章 文件管理.docx_第5页
第5页 / 共35页
点击查看更多>>
下载资源
资源描述

第6章 文件管理.docx

《第6章 文件管理.docx》由会员分享,可在线阅读,更多相关《第6章 文件管理.docx(35页珍藏版)》请在冰豆网上搜索。

第6章 文件管理.docx

第6章文件管理

第6章文件管理

VisualBasic提供的一系列管理文件的控件及方法,使应用程序可以像Windows的资源管理器一样自由地查看文件系统的磁盘、目录和文件等信息。

另外,除了利用传统处理文件的方式外,VisualBasic6.0还提供一种FSO(FileSystemObject)对象模型用于处理文件和文件夹。

第1节文件操作

在Windows应用程序中,当打开文件或将数据存入磁盘时,通常要打开一个对话框。

利用这个对话框,可以指定文件、目录及驱动器名,方便地查看系统的磁盘、目录及文件等信息。

6.1.1文件系统控件

文件系统控件包括:

驱动器列表框(DriveListBox)、目录列表框(DirListBox)和文件列表框(FileListBox)。

文件系统控件可以单独使用,也可以组合使用,如图6.1所示。

图6.1文件系统控件

1.驱动器列表框

驱动器列表框用于选择一个驱动器,是一个下拉列表框,其在工具箱中的图标为

默认状态时,顶端突出显示系统的当前驱动器名称。

该控件最重要的属性为Drive,当用户在列表中选择一个驱动器代号,运用这个属性值可以判断选定的驱动器数据,或指定列表框中显示的驱动器名称,如下面的程序代码:

Drive1.Drive="C:

\"

利用ChDrive语句可以将指定的驱动器设为当前驱动器,如:

ChDriveDrive1.Drive

2.目录列表框

目录列表框在工具箱中的图标为

,用于显示一个磁盘的目录结构。

显示从根目录起的所有子目录,用户可以选择不同目录项目使其反白,成为当前所在的目录。

通过目录列表框的Path属性,可以读取或指定当前的工作目录。

例如可以将驱动器列表框选定的驱动器名称设置为工作目录:

Dir1.Path=Drive1.Drive

上行程序代码可以使目录列表显示驱动器列表框选择的驱动器、所有可用的目录及子目录。

配合ChDir语句的使用,就能将工作目录改变为目录列表框中所选择的目录,如:

ChDirDir1.Path

3.文件列表框

工具箱中文件列表框的图标为

当程序运行时,文件列表框可列出特定目录中的所有文件名称,该目录是根据Path属性值来指定的。

利用这个Path属性可以显示当前工作目录中的所有文件,例如:

File1.Path=Dir1.Path

Pattern属性用来设置在程序运行时FileListBox中要显示的文件种类。

默认时Pattern属性值为“*.*”,即显示所有类型的文件。

VB支持通配符“*”和“?

”,如*.frm、?

?

?

.bmp。

例如,要将文件类型设置为*.txt文件:

File1.Pattern="*.txt"

利用分号可指定多种类型的文件显示,如:

File1.Pattern="*.txt;*.exe"

另外还有一些属性项目也能限制文件列表框所显示的文件,如Archive,Hidden,Normal,ReadOnly,System属性。

文件列表框的MultiSelect属性决定用户能否选择多个文件,默认只能选择单一文件。

文件系统控件的事件如表6.1所示。

表6.1文件系统控件的事件

控件名

事件

触发时刻

DriveListBox

Change

选择新驱动器或修改Drive属性

DirListBox

Change

双击选择新目录或修改Path属性

FileListBox

PathChange

设置文件名或修改Path属性

PatternChange

设置文件名或修改Pattern属性改变文件的格式

通常,DriveListBox,DirListBox和FileListBox控件一起使用,在改变驱动器列表框中的驱动器时,目录列表框中显示的目录也应同步变化,可通过DriveListBox控件的Change事件的以下语句来实现同步:

PrivateSubDrive1_Change()

Dir1.Path=Drive1.Drive

EndSub

同样,目录列表框中目录改变,同时使文件列表框也同步改变,可通过在DirListBox控件的Change事件的以下语句来实现:

PrivateSubDir1_Change()

File1.Path=Dir1.Path

EndSub

【例6.1】图形浏览器的设计。

首先,在窗体上添加一个图像框Image1,并将其Stretch属性设置为True。

然后依次在窗体上添加一个文件列表框File1,一个目录列表框Dir1,一个驱动器列表框Drive1,以及3个用于说明的标签,如图6.2所示。

图6.2图形浏览器

其程序代码如下:

PrivateSubDir1_Change()

File1.Path=Dir1.Path

File1.Pattern="*.bmp;*.wmf;*.ico"

EndSub

PrivateSubDrive1_Change()

Dir1.Path=Drive1.Drive

EndSub

PrivateSubFile1_Click()

Image1.Picture=LoadPicture(File1.Path&"\"&File1.FileName)

EndSub

单击驱动器可以相应地改变目录列表框中的目录,单击目录列表框可以相应地改变文件列表框中的文件名,在文件列表框单击文件名即可在图形框中显示所选择文件的图形。

另外,为了在程序开始运行时,文件列表框就显示指定类型的文件,可在Form_load事件过程中设置文件列表的Pattern属性,也可在设计时直接修改此属性值。

6.1.2使用公共对话框

一些应用程序中常常需要打开和保存文件、选择颜色和字体、打印等操作,这就需要应用程序提供相应的对话框以方便使用。

这些对话框作为Windows的资源,在VisualBasic中已被做成“公共对话框”控件。

公共对话框控件是一个ActiveX部件,位于“C:

\Windows\System\Comdlg32.ocx”中,名称为“MicrosoftCommonDialogControl6.0”。

添加该部件后,工具箱中即会出现公共对话框控件(CommonDialog)的图标

在应用程序中使用公共对话框控件,需要将它添加到窗体中。

由于在程序运行时看不见公共对话框控件,因此可以将它放置在窗体的任何位置。

在运行程序时,公共对话框可以显示一个对话框或是执行帮助引擎,所显示的对话框由控件的方法决定。

共有6种方法来指定相应的对话框,如表6.2所示。

表6.2显示公共对话框的方法

方法

所显示的对话框

ShowOpen

显示文件打开对话框

ShowSave

显示另存为对话框

ShowColor

显示颜色对话框

ShowFont

显示字体对话框

ShowPrinter

显示打印对话框

ShowHelp

调用Windows帮助引擎

每种对话框都有自己特殊的属性,这些属性既可以在属性窗口中设置,也可以在代码中设置,还可以在“属性页”对话框中设置。

在属性窗口中选择“(自定义)”,再单击右侧的“…”按钮,将出现“属性页”对话框,如图6.3所示。

图6.3“属性页”对话框

1.“打开”对话框

打开文件是Windows应用程序中常用的操作。

“打开”对话框可以用来指定文件所在的驱动器、文件夹及文件名、文件扩展名,如图6.4所示。

图6.4“打开”对话框

显示对话框很容易,只需在相应的过程中输入:

CommonDialog1.ShowOpen

公共对话框包括很多可在对话框中设置控件特性的属性。

例如FileName属性,存储了用户在“打开”或“另存为”对话框中输入的文件名称;DialogTitle(对话框标题)用于设置对话框的标题,默认为“打开”或“另存为”。

Filter属性。

过滤器Filter用于设置对话框中显示文件的类型,格式为:

描述|通配符。

如限定显示的文件类型为文本文件的话,在Filter属性栏可以输入:

Text(*.txt)|*.txt

如果设置多种文件类型时,还是用“|”隔开,例如限制打开文件的类型为*.txt及*.bat文件,可输入:

文本文件(*.txt)|*.txt|Bat(*.bat)|*.bat

Flags属性。

标志(Flags)用于设置对话框的一些选项,可以是多个值的组合。

例如,在Flags栏输入“&H1”设置值,程序运行中显示的“打开”对话框下面的“以只读方式打开”复选框被选中了。

用户可以通过查找VisualBasic帮助文件中的Flags属性来了解每一个对话框标志的完整描述。

例如,可以运用公共对话框控件作为打开文件的界面,重新设置例6.1的图形浏览器。

用CommonDialog1取代三个文件系统控件,并添加一个按钮Commoand1作为浏览文件之用,如图6.5所示。

图6.5窗体界面

在设置了CommonDialog1的Filer属性后,只需在命令按钮的Click事件中输入如下代码:

CommonDialog1.ShowOpen

Image1.Picture=LoadPicture(CommonDialog1.FileName)

2.“另存为”对话框

通过公共对话框的ShowSave方法可以显示“另存为”对话框。

“另存为”对话框可以用来指定文件所要保存的驱动器、文件夹及文件名,如图6.6所示。

图6.6“另存为”对话框

使用“另存为”对话框的方法及属性设置与“打开”对话框十分相似。

例如,利用FileName属性可以设置保存文件的文件名及路径。

3.“颜色”对话框

“颜色”对话框用来在调色板中选择颜色,或者创建自定义颜色。

运行时选定颜色并关闭对话框后,可用Color属性得到所选的颜色。

例如,用变量Select_Color保存选定的颜色值,程序可写成:

Select_Color=CommonDialog1.ShowColor

4.“字体”对话框

使用公共对话框的ShowFont方法可显示“字体”对话框,如图6.7所示。

“字体”对话框用以通过指定字体、大小、颜色、样式设置字体。

图6.7“字体”对话框

和其他公共对话框一样,只要设置需要的标志和属性,就可以显示“字体”对话框。

但值得注意的是,必须将Flags属性设置为下列常数之一与其他选项之和:

cdlCFScreenFonts或1(屏幕字体)

cdlCFPrinterFonts或2(打印机字体)

cdlCFBoth或3(=1+2,两种字体皆有)

例如,设为259(=256+3,是cdlCFEffects常数与3之和),在对话框中将出现颜色、效果等选项。

运行时选定设置并关闭对话框后,返回属性如表6.3所示。

表6.3“字体”对话框的返回属性

属性

确定

Color

确定颜色。

如要使用这个属性,必须先将Flags属性设置为cdlCFEffects或256

FontBold

是否选定了粗体

FontItalic

是否选定了斜体

FontStrikethru

是否选定删除线。

如要使用这个属性,必须先将Flags属性设置为cdlCFEffects或256

FontUnderline

是否选定下划线。

如要使用这个属性,必须先将Flags属性设置为cdlCFEffects或256

FontName

选定字体的名称

FontSize

选定字体的大小

5.“打印”对话框

通过使用公共对话框的ShowPrinter方法可显示“打印”对话框,如图6.8所示。

图6.8“打印”对话框

“打印”对话框可用以指定打印输出方式,可以指定被打印页的范围,打印质量,打印份数等。

这个对话框还包含当前安装的打印机的信息,并允许配置或重新安装缺省打印机。

但这个对话框并不给打印机传送数据,只是指定希望打印数据的情况。

如果PrinterDefault属性为True,可以使用Printer对象按选定的格式打印数据。

第2节数据文件

为了能有效地存取数据,数据必须以某种特定的方式存储,这种特定的方式称为文件结构。

VisualBasic文件由记录组成,记录由域(或字段)组成,域由字符组成。

只要按照文件结构去存取,就能读取数据或写入数据。

数据文件按照其数据的存取方式,分为3种类型:

顺序文件、随机文件和二进制文件。

∙顺序文件:

是普通的文本文件,文件中每一个字符都代表一个文本字符或文本格式序列,用于读写在连续块中的文本,如换行符等。

∙随机文件:

是由相同长度的记录集合组成的,适用于读写有固定长度记录结构的文本文件或二进制文件,或者是由用户定义类型的字段组成记录的文件。

∙二进制文件:

适用于读写任意结构的文件,除了没有数据类型或记录长度之外,它与随机文件很相似。

二进制存取方式与随机存取方式的不同点在于二进制存取可以定位到文件的任一字节位置,而随机存取必须定位到记录的边界上。

6.2.1顺序文件

顺序文件是一系列的ASCII码格式的文本行,数据是按顺序排列存放的,与文档中出现的顺序相同。

顺序文件只提供第1个记录的位置,要找到其他记录必须从头开始,直到找到为止。

1.顺序文件的打开与关闭

在对文件进行操作之前,必须用Open语句打开或建立一个文件。

Open语句的格式为:

Open<文件名>ForInput|Output|AppendAs[#]<文件号>[Len=buffersize]

说明:

(1)“文件名”为所要操作的文件名称,包括整个路径和文件名。

(2)Input选项用来从文件中读取。

此时该文件必须已经存在,否则,会产生错误。

(3)Output选项用来在磁盘上创建一个新的顺序文件,文件打开后文件指针位于文件开头,准备向文件写入数据。

磁盘上的同名文件将被覆盖。

(4)Append选项用来打开或创建一个新的顺序文件,文件打开后文件指针位于文件的末尾,准备向文件尾部追加式写入数据。

若磁盘上没有该文件,则创建一个新文件。

(5)文件号是整型表达式,范围在1~511之间。

在执行Open语句时,文件与分配的文件号相关联。

所有当前使用的文件号都必须是唯一的。

(6)Len参数指定缓冲区的字节数。

例如,以Output模式打开TESTFILE文件:

Open"TESTFILE"ForOutputAs#1

为了避免指定相同的代码给不同的文件,可以使用FreeFile函数。

FreeFile函数返回下一个可供Open语句使用的文件号,提供一个尚未使用的文件号。

例如,利用循环语句打开多个文件时,可以利用FreeFile为每个文件指定文件号:

DimMyIndex,FileNumber

ForMyIndex=1To5

FileNumber=FreeFile

Open"TEST"&MyIndexForOutputAs#FileNumber

NextMyIndex

文件读写完毕后,应及时将其关闭。

关闭打开的文件要用到Close语句,其格式为:

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

若省略参数,则将关闭用Open语句打开的所有活动文件。

2.顺序文件的读取操作

要读取文本文件的内容,应以Input方式打开该文件。

然后使用LineInput#,Input(),或者Input#语句将文件复制到内存变量中,它们的格式分别为:

LineInput#<文件号>,<变量名>

Input#<文件号>,<变量列表>

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

说明:

(1)LineInput#语句是一行一行地读取数据,可以读取除了数据行中的回车符或回车换行符之外的所有字符。

(2)Input#语句可以读取文件中的数据列。

变量列表由一个或多个变量组成,可以是简单变量、数组元素和用户定义类型的元素,用逗号分隔开多个变量。

(3)Input函数用于以Input方式打开的文件,返回它所读取的所有字符。

【例6.2】设置一个阅读器,用以显示指定的文本文件。

首先,在窗体上添加一个文本框Text1,并将其MultiLine属性设置为True,ScrollBars属性设置为2-Vertical;增加一个公共对话框CommonDialog1,其Filter属性值修改为“文本文件(*.TXT)|*.txt”;再增加两个命令按钮,其中按钮Command1用于读取指定文件。

设置好的用户界面,如图6.9所示。

图6.9读取文本文件

编写读取文件按钮Command1的Click事件代码:

PrivateSubCommand1_Click()

CommonDialog1.ShowOpen

fname=CommonDialog1.FileName

Iffname<>""Then

Text1.Text=""

OpenfnameForInputAs#1

b=""

DoUntilEOF

(1)

LineInput#1,nextline

b=b&nextline&Chr(13)&Chr(10)

Loop

Close#1

Text1.Text=b

EndIf

EndSub

在读取数据时,常用到两个函数:

LOF(文件号)和EOF(文件号)。

LOF函数用于返回Open打开的文件大小,以字节为单位。

EOF函数表明是否到达顺序文件的末尾。

3.顺序文件的写入操作

要将数据写入文本文件,应以Output或Append方式打开该文件。

然后使用Print#或Write#语句将数据写入文件中。

二者的格式分别为:

Print#<文件号>,[表达式列表]

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

其中,“表达式列表”缺省时向文件输出一个空行或回车换行符。

多个表达式之间用空格、分号或逗号隔开。

例如,把字符串“Howareyou”写入文件中:

Print#1,"How";"are";"you"

通常用Print#语句将LineInput#读取的数据写入文件,Write#语句常与Input#语句配合使用。

例如,可以在例6.2界面中添加一个保存按钮Command2,用于把阅读器中的文件另存为其他文件,或修改内容后重新存盘。

该命令按钮的Click事件代码为:

PrivateSubCommand2_Click()

CommonDialog1.ShowSave

fname=CommonDialog1.FileName

Iffname<>""Then

OpenfnameForOutputAs#1

Print#1,Text1.Text

Close#1

EndIf

EndSub

6.2.2随机文件

随机文件是以随机方式存取的文件,由一组长度相等的记录组成。

它有如下特点:

∙随机文件的记录长度为固定长度。

使用前每个字段所占字节必须事先定好。

∙记录包含有一个或多个字段,记录必须是用户自定义类型。

∙每个记录都有一个记录号,随机文件打开后,既可读又可写,可以根据记录号访问文件中的任何一个记录,不需要像顺序文件一样按顺序进行。

1.打开文件

随机文件的打开仍用Open语句,格式为:

Open<文件名>[ForRandom]As<文件号>[Len=<记录长度>]

其中,Random是缺省的访问类型,可以省略。

记录长度默认为128个字节,每个记录的长度是将各字段所占的字节数相加。

如果记录长度比文件记录的实际长度短,则产生一个错误;如果比记录的实际长度长,则会浪费磁盘空间。

可以用Len()函数返回记录的长度。

随机文件与顺序文件一样,使用Close语句关闭打开的文件。

2.读操作

要对打开的随机文件中记录进行编辑,应先把记录从文件读到内存变量。

把记录读入变量,使用Get#语句:

Get#<文件号>,[记录号],<变量名>

其中,记录号是要读记录的编号,记录号可以是整型、变体或长整型,如果省略记录号,则为最近执行Get或Put语句的下一个记录,或由Seek函数指定的记录。

变量名是接收记录内容的记录型变量名,一般声明为用户定义类型。

3.写操作

Put#语句用于将变量中的内容写入磁盘文件中,进行记录的添加或替换。

其格式为:

Put#<文件号>,[记录号],<变量名>

其中,记录号是要写入或替换的记录位置,变量名是要写入磁盘的数据的变量名,其数据类型应与记录类型一致。

在随机文件中添加记录,事先找出文件的最后一个记录的记录号,然后将新的记录写在它的后面,使用Put#语句向随机文件的末尾添加新记录。

4.删除记录

通过清除其字段可以删除一个记录,但是该记录仍在文件中存在。

通常文件中不能有空记录,最好把余下的记录拷贝到一个新文件,然后删除老文件。

要清除随机文件中删除的记录,可按下面几步执行:

(1)创建一个新文件。

(2)把有用的所有记录从原文件复制到新文件。

(3)关闭原文件并用Kill语句删除。

(4)使用Name语句把新文件重新命名为原文件名。

【例6.3】将某班学生考试成绩输入到“考试成绩”随机文件中。

每个学生的记录包含学号、姓名、数学成绩、语文成绩和外语成绩五个字段,如表6.4所示。

表6.4学生成绩单

学号

姓名

数学成绩

语文成绩

外语成绩

0046

王晓明

85

78

65

0047

李宁

75

80

78

0048

唐福强

67

76

94

……

……

……

……

……

0090

张大力

82

86

83

创建用户界面。

在窗体中先添加两个框架Frame1和Frame2。

在Frame1中添加一个文本框数组Text1(0)~Text1(4)和5个标签,在Frame2中添加一个列表框List1,在两个框架之间添加4个命令按钮Command1~Command4,如图6.10所示。

图6.10随机文件的操作

首先在窗体的通用过程段创建用户定义类型变量:

PrivateTypecj

xhAsString*6

xmAsString*6

sxAsInteger

ywAsInteger

wyAsInteger

EndType

PrivatecjdAscj

编写显示、输入、添加、删除及列表框的Click事件代码:

PrivateSubCommand1_Click()'显示数据

DimlastrecAsInteger

DimsxAsSingle,ywAsSingle,wyAsSingle

Open"考试成绩"ForRandomAs#1Len=Len(cjd)

lastrec=LOF

(1)/Len(cjd)

List1.Clear

Forn=1Tolastrec

Get#1,n,cjd

Withcjd

xh=Format(.xh,"@@@@@@")

xm=Format(RTrim(.xm),"@@@@@@")

sx=Format(.sx,"####")

yw=Format(.yw,"####")

wy=Format(.wy,"####")

msg=xh&xm&""&sx&""&yw&""&wy

EndWith

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

当前位置:首页 > 高等教育 > 院校资料

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1