1、 Print File1.List(File1.ListCount - 1) 显示文件控件File1内的最后一个文件名Print File1.Pattern 显示文件控件File1内所有文件的扩展名 Print File1.Path 显示文件控件File1内所有文件的目录路径(含盘符)End SubDblClick事件:例如,双击执行可执行程序Sub filFile_DblClick( )ChDir (dirDirectory.Path) 改变当前目录 RetVal = Shell(filFile.FileName, 1) 执行程序由于“文件”本身具有Normal、ReadOnly、Archi
2、ve、Hidden及System属性,因此一般情况下,在文件列表框中是不显示隐藏属性文件的,若想显示,则应将文件列表框中的Hidden属性设置为True,其含义是“要看见隐藏文件”。三种文件控件重要属性一览表属性适用的控件作用示例Drive 驱动器列表包含当前选定的驱动器名Drive1.Drive=”C”path目录列表和文件列表包含当前路径(含盘符)Dir1.Path=”C:WINDOWS”FileName文件列表包含选定的文件名MsgBox File1.FileNamePattern决定显示的文件类型File.Pattern=”*.bmp”三种文件控件重要事件一览表事件事件发生的时机Cha
3、nge驱动器列表框目录列表框 驱动器列表框的Chang事件是在选择一个新的驱动器或通过代码改变Drive属性的设置时发生;目录列表框的Chang事件在双击一个新的目录或通过代码改变Path属性的设置时发生。PathChang文件列表框当文件列表框的Path属性改变时发生PatternChang当文件列表框的Pattern属性改变时发生Click目录和文件列表框用鼠标单击时发生DblClick用鼠标双击时发生例9.1 设置一个文件管理系统。当用户在文件列表框中单击文件名时输出该文件名,双击一个可执行文件的文件名时就运行该程序。例9.1在myvbex9_1ex9_1.vbp下(三个文件控件之间的连
4、动)窗体Form2代码Public Fname As String 文件标识符,窗体2中定义的全局量Private Sub Dir1_Change() 将完整的目录路径送给文件列表Path属性 File1.Path = Dir1.Path path属性在属性窗口不可见Private Sub Drive1_Change() 改变目录列表中Path属性的驱动器名 Dir1.Path = Drive1.Drive Private Sub Form_Load() Combo1.AddItem 所有文件工程、窗体文件图形、图像文件 Combo1.ListIndex = 0 指定组合列表框默认显示 Fil
5、e1.Pattern = *.jpg;*.gif;*.ico;*.bmp;*.cur 文件控件内默认列出的文件类型Private Sub Combo1_Click() 单击组合列表框,改变文件控件内所列文件类型 Dim item As String item = Choose(Combo1.ListIndex + 1, *.*, *.frm;*.VBP*.WMF;) File1.Pattern = item 确定文件列表框所列文件的类型将此内容放在单击事件过程中也可,但单击事件在这里屏蔽了双击事件演示时选择一个扩展名为EXE的文件,比如c:windowscalc.exe(计算器),其他类型的文
6、件不可用shell打开Private Sub File1_DblClick() Dim Retval As Long Retval为Shell函数成功调用的返回值为一个任务标识 If Right(File1.Path, 1) = Then 当前选定的目录是根目录 Fname = File1.Path + File1.FileName Else 当前选定的目录是子目录 Fname = File1.Path + + File1.FileName End If If Right(File1.FileName, 3) = EXE Or Right(File1.FileName, 3) = COM Th
7、en Retval = Shell(Fname, 1) 以有指针,正常窗口类型打开文件 Else Form3.ShowPrivate Sub File1_KeyDown(KeyCode As Integer, Shift As Integer) 按Del键删除文件 If KeyCode = vbKeyDelete Then Del 键扫描码 ChDrive Drive1.Drive 设置缺省驱动器 ChDir File1.Path 设置缺省目录 Kill File1.FileName File1.Refresh 更新列表框窗体Form3代码Private Sub Command1_Click(
8、) 显示命令 选择组合框内的所有文件或工程、窗体文件选项而显示在文件列表框内的文件即使是图形类文件也不显示 If Form2.File1.Pattern = Or Form2.File1.Pattern = MsgBox (不是图形、图像文件 Print Form2.Fname Else Image1.Picture = LoadPicture(Form2.Fname)Private Sub Command2_Click() 返回命令 Unload Form39.2 文件的读写9.2.1 文件及其结构文件:存储在外部介质上的数据的集合称为文件。文件按名存取。1. 记录 由若干个相互关联的数据项
9、组成。例如,由学生的学习成绩信息组成的记录,它由学号、姓名、各课成绩、总分等数据项组成。2. 文件及其种类 VB文件由纪录组成的,而记录是由字段组成的,字段是由字符组成的。根据不同的分类标准文件可分为不同的类型。分类标准类别特点按数据性质程序文件存放可以由计算机执行的程序数据文件存放普通的数据。通过程序来存取和管理按文件存储方式和结构顺序文件(sequential)组织比较简单,不能灵活存取和增加数据。记录可长可短,记录之间是以“换行”字符为分隔符号。随机文件(random)记录长度固定,存取灵活方便,速度快易修改。记录之间没有分隔符。只要给出纪录号即可。按数据编码ASCII文件可以用字处理软
10、件建立和修改二进制文件(binary)不能用普通的字处理软件编辑,占空间小。可认为(记录长度为1(字节)的随机文件),直接将二进制码存放在文件中,没有什么格式,是最原始的文件类型。它以字节数来定位数据,允许程序按所需的任何方式组织和访问数据。在VB中文件处理分三个步骤:打开(或)建立文件;对文件进行读写操作;关闭文件。9.2.2 顺序访问模式1. 打开文件要对文件操作,必须首先打开文件。 格式:Open “文件名” For 方式 Access存取类型lock As #文件号 Len=记录长度 文件名可以是字符串常量,也可以字符串变量(包括文件所在的目录路径)。(1) 方式OutPut - 对文
11、件进行写操作, 如果文件不存在,则创建新文件。如果文件已存在,则覆盖文件中已有的内容。用于顺序输出方式,打开时文件指针定位在文件开头。InPut - 对文件进行读操作,如果文件不存在,则会出错。Append - 在文件未尾追加纪录,不覆盖文件原有的内容。如果文件不存在,则创建新文件。用于顺序输出方式,打开时文件指针定位在文件的尾部。省略方式,则默认为Random方式打开文件,对于方式为Binary的则为二进制方式打开文件。(2)存取类型Read -(只读) 、Write - (只写)、ReadWrite -(可读可写)。(3)lock(允许还是不允许共享该文件)- Shared(共享)、 Lo
12、ck Read(锁定读取)、 Lock Write(锁定写入)、Lock Read Write(锁定读写)。 (4) 文件号 1511,可以用FreeFile函数获得一个可利用的文件号。FreeFile(intRangeNumber),有参数,返回值为1-225或256-511。若无参数intRangeNumber就不必使用圆括号,返回值为1-255。 例如:intFileNumber=FreeFileOpen “student.dat” For Output As intFileNumber同一个文件可以用几个不同的文件号打开。但是用output,append方式时必须先将文件关闭不能重新打
13、开。而当使用input,random或 binary方式时不必关闭就可以用不同的文件号打开。(5) 记录长度 记录长度为1 32767之间的整数(单位字节),它指定在计算机内存中用于存放文件数据缓冲区的大小,目的在于改善I/O的速度。缺省为512字节。对于随机文件,该值就是记录长度,对于顺序文件该值就是缓冲字符数。 例如,打开C:VBSCORE,供写入数据,指定文件号为#1。 OPEN C:VBSCORE For Output AS #12. 写入命令把计算机内存中的数据传输到相关联的外部设备并以文件存放的操作称为写(输出)。将数据写入磁盘文件所用命令是Write# 或 Print#命令。 (
14、1)Print #文件号,输出列表 输入列表是用Spc(n)|Tab(n)表达式列表;|,组成的式子。分号和逗号分别对应紧凑格式和标准格式。Print# 语句和print方法的输出格式类似。Print#语句之行后,并不是立即把缓冲区中的内容写入磁盘,只有在关闭文件,缓冲区已满或缓冲区未满但执行了下一个print#语句时才将缓冲区的内容写入磁盘。保存文本框内容的例子参见myvbvb9ex9_b2 假定文本框的名称为txtTest,文件名为TEST.DAT。 方法1:把整个文本框的内容一次性地写入文件。 Open TEST.DAT For Output As #1 Print #1, txtTes
15、t.Text Close #1 方法2:把整个文本框的内容一个字符一个字符地写入文件。 myvbvb9ex9_b2Open For i=1 To len(txtTest.Text) Print #1,Mid(txtTest.Text,i,1); Next i Close #1myvbvb9ex9_b3例Private Sub main() Open App.Path & abc.dat Print #1, 这是一本历史教科书 Print #1, 将一个空白行写入数据文件标准区1; Tab;标准区2将数据在两个标准区中写入HelloWorLd 写入时用空格隔开这两个字符串 Print #1, S
16、pc(5);5 Leading Space该行前有5个空格 Print #1, Tab(10);从该行的第10列开始写入字符串 Close #1写入结果:这是一本历史教科书标准区1 标准区2Hello WorLd5 Leading Space Hello(2)Write #文件号,输出列表 输出列表是指用“,”或“;”分隔的表达式。它与Print的区别是:Write是以紧凑格式将数据存放在文件中并在数据项之间插入“,”,给字符串加上双引号,将日期型数据用“#”号括起来,以#True#或#False#的格式输出Boolean型数据,空数据(NULL)和出错信息的输出格式分别是#NULL#和#Er
17、ror errorcode#,其中Errorcode代表解释输出错误的错误编号。Write# 语句在将表达式写入到文件后会自动插入一个新行字符,即回车换行符(chr(13)+chr(10)。myvbvb9ex9_b4 Dim name As String Dim grade As Integer Dim stime As Date Dim yn As Boolean name = 许永: grade = 3 stime = Now yn = Falsedegree.text For Output As 1 Write #1, name, grade; Write #1, name; stime
18、 grade,NULL Write #1, name, Now; yn写入文件的结果是:,3, 许永,#2004-11-18 14:44:59#,3,#NULL#,59#,#FALSE#3. 读顺序文件把数据文件中的数据传输到内存程序中的操作叫做读操作(或称输入、读)。(1) Input #文件号,变量,变量,使用input读出数据时,变量的类型应与被读的数据类型相匹配,否则结果可能不正确。用input语句把读出的数据赋给数值变量时,以遇到的第一个非空格、非回车和换行符作为数据的开始再次遇到空格、回车或换行符作为数值的结束。对于字符串数据,同样忽略开头的空格回车和换行符。为了能用Input#
19、语句正确的将文件中的数据读出来,应当在写文件时使用Write# 语句而不用Print# 语句。 或者使用Print#语句时人为地在各量之间插入逗号分隔。(2)Line Input #文件号,字符串变量 一次读出一行数据直到遇到回车(chr(13)或回车换行符(chr(13)+chr(10)为止送到变量中,遇到的的回车符和换行符被跳过不送入字符串变量中。Line Input语句主要用来读取文本文件。(3)Input$(读取字符数,#文件号)使用该函数可以随意从文件中读取指定数目的字符。这个函数只用于用input 或binary方式打开的文件。它与语句input不同,它是把文件当成非格式的字符流来
20、读取,返回它所读出的所有字符,包括逗号、回车符、空白列,换行符,引号和前导空格等。4. 关闭文件 文件不再使用必须将它关闭,否则有可能使数据丢失。Close #文件号, #文件号.例如,Close #1, #2, #3如果省略了文件号,表示关闭所有已打开的文件。关闭文件,还有一个Reset语句,其格式为:Reset,它关闭所有被打开的磁盘文件。5. 与读文件(包括随机、二进制文件)有关的函数和语句(1)LOF函数 LOF(文件号)返回一个长整型数,表示用open语句打开的文件的大小,该大小以字节为单位。在VB中文件的基本单位是纪录,每个纪录的长度默认是128字节,因此对于用VB建立的文件,LO
21、F返回的将是128的整数倍(?)。如果是0则说明该文件是空文件。要取得一个尚未打开文件的大小,应该使用FileLen函数,格式为:FileLen(文件名)。如果对于已打开的文件使用该函数,则返回的值表示该文件打开前的长度。例 在例myvbvb9ex9_b4中建立的degree.text占101字节,用LOF函数去测量也显示为101。Open App.Path & For Input As 1MsgBox LOF(1)(2) EOF函数 EOF(文件号)返回读写位置。对于顺序文件用EOF函数可测试是否到文件末尾,到文件未尾时,EOF函数为True,否则为False。对于随机、二进制文件,当最近一
22、个执行的Get语句无法读到一个完整的记录时返回True,否则返回False。(3)Loc函数Loc(文件号)返回一个长整型数,在已打开的文件中指定当前读/写位置对于随机文件,Loc返回上一次对文件进行读出或写入的记录号。对于二进制文件,Loc返回上一次读出或写入的字节位置。对于顺序文件,返回值是文件中当前字节位置除以128的值。由于文件只能从头到尾顺序写入或读出,因此,一般不需要使用Loc函数。随机文件的记录号从1开始,字节文件的起始位置也是1。(4)Seek函数Seek(文件号)Seek函数返回一个用Open语句打开的文件的当前读写位置。即返回当前定位指针。对于随机文件,Seek返回文件指针
23、指向的将要读出或写入的记录号。对于二进制文件和顺序文件,Seek返回将要读出或写入的字节位置。(5)Seek语句Seek(文件号,位置)在open语句打开文件后,操作系统自动生成一个指示文件读、写位置的隐含的文件指针。Seek语句用来定位文件指针。对于用Random方式打开的文件,“位置”是下一个操作的记录号。对于顺序文件,“位置”是下一操作的地址。在Get或Put语句中的记录号优先于用Seek语句确定的位置。若文件结尾之后使用Seek操作,则进行文件写入的操作会把文件扩大。如果企图对一个位置为负数或零的文件使用Seek操作,则会发生错误。Seek语句和Seek函数的区别:函数返回文件指针的当
24、前位置。对于顺序文件返回的是将要读写的文件位置的信息;对于随机文件,函数返回的是下一个记录号。而语句则是定位文件指针到指定的位置。例 在例myvbvb9ex9_b4中建立的degree.text,用Seek语句去读它第一行中的日期数值。 Seek #1, 21 Input #1, cd 定义cd为日期类型的变量 MsgBox cdMsgBox Seek(1) 显示:#2004-11-18 14:44文件内的一个汉字算两个字节,其余的双引号,逗号算一个字节例 读文本文件到文本框 假定文本框名称为txtTest,文件名为MYFILE.TXT。一行一行读参见myvbvb9ex9_b2 txtTest.Text Open MYFILE.TXT For Input As #1 Do While Not EOF(1) Line Input #1, InputData txtTest.Text txtTest.Text + InputData+vbCrLf vb符号常数换行 Loop Close #1 方法2:一次性读如果全是英文能正确读出,否则运行是可
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1