页数:73页文件大小:460.1 KB来源: VB程序设计ppt课件
本课件讲解VB文件处理,先介绍文件的基本概念与分类,再归纳目录与文件操作语句和函数,说明驱动器、目录与文件三个文件系统控件的配合使用,随后分别讲解顺序文件、随机文件与二进制文件的打开、读写与关闭方法,并配有完整例题。
第12章 文件
第12章文件本章要点:文件的基本概念常用的文件操作语句和函数文件系统控件顺序文件随机文件二进制文件
12.1 文件的基本概念
12.1文件的基本概念文件:指存储在外部介质上的数据的集合。分类:按存储介质分—磁盘文件、磁带文件、打印文件按文件内容分—程序文件、数据文件按访问方式分—顺序文件、随机文件、二进制文件顺序文件:普通的纯文本文件。
查找数据必须按记录顺序进行。不能同时进行读写操作。随机文件:以固定长度的记录为单位进行存储。可以按任意顺序访问其中的数据。
可以同时进行读写操作。不能用字处理软件查看。二进制文件:以字节为单位进行访问。不能用字处理软件查看。
12.2 常用的文件操作语句和函数
与文件、文件夹有关的函数和语句
12.2.1与文件、文件夹有关的函数和语句1.CurDir函数格式:CurDir [<驱动器>]功能:返回一个字符串,表示某驱动器的当前路径。
<驱动器>:字符串表达式,指定一个存在的驱动器。省略该参数时表示当前驱动器。例如,设C为当前的驱动器,当前路径为“C:\WINDOWS”,使用下列语句返回当前路径。
Dim MyPath as stringMyPath = CurDir'返回“C:\WINDOWS”MyPath = CurDir("C")'返回“C:\WINDOWS”
2.ChDir语句
格式:ChDir <路径名>功能:改变当前的目录。<路径名>:一个字符串表达式,表示将成为新的缺省目录的名称。
例如,将当前目录改为“MyDir”:ChDir "MyDir"例如,假设当前的驱动器是“C:”,把缺省目录改至“D:\MyDir”,而“C:”仍旧是当前驱动器:ChDir "D:\MyDir"
3.ChDrive语句
格式:ChDrive <驱动器>功能:改变当前的驱动器。<驱动器>:一个字符串表达式,指定一个存在的驱动器。
例如,使用ChDrive语句将当前的驱动器改为“D”:ChDrive "D"
4.MkDir语句
格式:MkDir <路径名>功能:创建一个新的目录。<路径名>:一个字符串表达式,表示要创建的目录的名称。
<路径名>可以包含驱动器。例如,在D驱动器下建立新的目录MyDirMkDir "D:\MyDir"
5.RmDir语句
格式:RmDir <路径名>功能:删除一个存在的目录。<路径名>:一个字符串表达式,指定要删除的目录。
如果想要使用RmDir来删除一个含有文件的文件夹或目录,则会发生错误。在试图删除文件夹之前,必须先使用Kill语句来删除此目录下的所有文件。
例如:删除C驱动器下的目录MyDirRmDir "C:\MyDir"
6.Dir函数
格式:Dir [(<路径名> [,<属性>])]功能:返回一个String类型的字符串,用来表示一个文件或目录名称。
<路径名>:一个字符串表达式,是可选参数,用来指定文件或目录的名称。<属性>:用来指定文件、目录或文件夹的属性。
0 (或vbNormal):(缺省)指定没有属性的文件。1 (或vbReadOnly):指定无属性的只读文件.2 (或vbHidden) :指定无属性的隐藏文件4 (或VbSystem):指定无属性的系统文件8 (或vbVolume) :指定卷标文件;如果指定了其它属性,则忽略vbVolume16 (vbDirectory):指定无属性文件及其路径和文件夹。
Dir函数应用示例
Dir函数应用示例(续)
③MyFile = Dir(“test.txt”, vbHidden+vbReadOnly)表示返回属性为隐藏的只读文件test.txt的名称④MyPath = "c:\winnt"Print Dir(MyPath,vbDirectory)表示如果文件夹winnt存在,则显示其名称。
1. FileCopy语句
1.FileCopy语句格式:FileCopy <源文件名>, <目标文件名>功能:复制文件。<源文件名>:一个字符串表达式,用来表示要被复制的源文件名。
<源文件名>可以包含目录及驱动器。<目标文件名>:一个字符串表达式,用来指定要复制的目标文件名。
<目标文件名>可以包含目录及驱动器。12.2.2对文件和文件夹的操纵
FileCopy语句示例
例如,将源文件srcfile.txt复制到D盘且目标文件名为destfile.txtDim sFile, dFilesFile = "srcfile.txt"'指定源文件名dFile = "d:\destfile.txt"'指定目标文件名FileCopy sFile, dFile
2.Kill语句
格式:Kill <路径名>功能:删除指定的文件。<路径名>:一个字符串表达式,用来指定被删除的文件。
<路径名>可以包含目录及驱动器。Kill支持多字符(*)和单字符(?)的通配符来指定多个文件,使用时一定要慎重!
例如,删除testfile.txt文件Kill "TestFile.txt"将当前文件夹下所有*.txt文件删除。Kill "*.txt"
3.Name语句
格式:Name <原路径名>As <新路径名>功能:重新命名文件、目录或文件夹的名称。<原路径名>:一个字符串表达式,表示已存在的文件名、目录或文件夹,可以包含目录及驱动器。
<新路径名>:一个字符串表达式,表示新的文件名、目录或文件夹,可以包含目录及驱动器。
Name语句的使用注意
Name语句应用示例
4.FileDateTime函数
格式:FileDateTime(<路径名>)功能:返回一个Variant(Date)类型数据,表示文件或目录被创建或最后被修改的日期和时间。
<路径名>:一个字符串表达式,指定文件名、目录或文件夹。可以包含目录以及驱动器。例如,获得文件C:\test.txt最后被修改时间,日期与时间的显示格式依系统的地区设置而定。
Print FileDateTime("TestFile")返回“1/12/2005 5:35:27PM”,表示最后被修改时间为2005年1月12日下午5时35分27秒。
5.FileLen函数
格式:FileLen(<路径名>)功能:返回文件的长度,以字节为单位表示,是一个Long类型数据。<路径名>:一个字符串表达式,用来指定文件名。
当调用FileLen函数时,如果所指定文件已经打开,则返回的值是这个文件在打开前的大小。若要取得一个打开文件的长度大小,应使用LOF函数。
例如,使用FileLen来获得文件C:\testfile.txt长度。Dim MySizeMySize = FileLen("c:\testfile.txt")
6.GetAttr函数
GetAttr函数应用示例
GetAttr函数应用示例(续)
③如果c:\apple.txt具有隐含和只读属性,则下列语句返回非零值。Print MyAttr And (vbHidden + vbReadOnly)④如果MyDir为一文件夹,则下列语句返回16Print GetAttr("MyDir")
7.SetAttr语句
格式:SetAttr <路径名>,<属性>功能:设置文件属性<路径名>:一个字符串表达式,用来指定文件名。
<属性>:一个常数或数值表达式,表示文件的属性。<属性>参数值见P261表12-2。例如:设置文件c:\testfile.txt具有隐含和只读属性SetAttr "c:\testfile.txt",vbHidden+vbReadOnly
【例12-1】文件属性查询程序
【例12-1】使用本节介绍的函数和语句实现下图所示的对话框。运行程序后,首先弹出一个“打开”对话框,在对话框中选中一文件,按“确定”按钮,即可显示下图b。
a)设计界面b)运行界面CommonDialog1
【例12-1】的代码实现
程序代码:
Private Sub Form_Load() Dim filename As String CommonDialog1. ShowOpen'打开通用对话框filename= CommonDialog1.filename'获得文件名 Text1.Text=filename'显示文件名'获得选中文件所在的驱动器 Label3.Caption=Left(CurDir(filename), 3)Label5.Caption=FileLen(filename)'获得文件长度'获得文件创建时间Label7.Caption = FileDateTime(filename)'判断文件是否具有只读属性 Check1.Value = GetAttr(filename) And vbReadOnly'判断文件是否为隐藏文件Check2.Value = GetAttr(filename) And vbHidden End Sub12.3 文件系统控件
驱动器列表框DriveListBox
显示系统中所有有效磁盘驱动器1.属性Drive:返回或设置驱动器名称只能在运行时设置。取值—A: C: D: E:等例:Drive1.Drive="c:"注意:改变Drive属性并不能自动变更当前驱动器,要改变当前驱动器需使用ChDrive语句。
例:ChDrive "D:"例:ChDrive Drive1.Drive12.3.1驱动器列表框(DriveListBox)
驱动器列表框的Change事件
2.事件Change:当选择一个新驱动器或通过代码改变Drive属性时发生。例:将选择的驱动器设置为当前驱动器:
Private Sub Drive1_Change()ChDrive Drive1.Drive End Sub目录列表框DirListBox
显示一个树型的目录结构1.属性Path:设置或返回当前工作目录的完整路径(包括驱动器盘符)例:Dir1.Path = "c:\winnt"注意:在目录列表框中选择目录不能改变当前目录,要真正改变当前目录需使用ChDir语句。
例:ChDir "c:\system"例:ChDir Dir1.Path12.3.2目录列表框(DirListBox)
目录列表框的Change事件
2.事件Change:当双击一个目录项或通过代码改变Path属性时发生。例:将选择的路径设置为当前路径
Private Sub Dir1_Change()ChDir Dir1.Path End Sub文件列表框FileListBox
【例12-2】三个文件系统控件联动
【例12-2】在窗体上建立DriveListBox控件、DirListBox控件和FileListBox控件,通过三个控件的关联实现各控件间的联动。
【例12-2】的代码实现
程序代码如下:
Private Sub Form_Load() Text1.Text = "" Drive1.Drive = "c:\"'初始化驱动器列表框Rem设置文件属性--如显示只读文件(实验时去掉注释)' File1.ReadOnly = True' File1.Archive = False' File1.System = False' File1.Normal = False' File1.Hidden = FalseRem设置文件过滤条件(实验时可去掉注释)' File1.Pattern = "*.txt;*.exe" End Sub【例12-2】的代码实现(代码)
Private Sub Drive1_Change()'使驱动器列表框和目录列表框同步 Dir1.Path = Drive1.Drive End Sub Private Sub Dir1_Change()'使目录列表框和文件列表框同步 File1.Path = Dir1.Path End Sub Private Sub File1_Click()'在文本框中显示文件名 Text1.Text = File1.FileName End Sub12.4 顺序文件
12.4顺序文件顺序文件:ASCII文件由任何字处理软件建立、在VB中建立只能按顺序存取记录例:文件AA.DAT内容如下:"zhang san","85","90""li si","70","66""wang wu","90","89"记录:行域:字段,数据项顺序文件操作:打开文件、读或写文件、关闭文件
顺序文件的打开
1.顺序文件的打开格式:Open<文件名>FOR<方式>AS[#]<文件号>功能:按指定的方式打开文件,并指定一文件号。
<方式>:Input—以只读方式打开。当文件不存在时出错。Output—以写方式打开。如果文件不存在,则创建一个新文件。
如果文件已经存在,则删除原数据。Append—以添加方式打开文件。如果文件不存在,就创建一个新的文件。如果文件已经存在,写数据时从文件尾添加。
<文件号>:1到511之间的整数。12.4.1顺序文件的打开和关闭
顺序文件打开示例
顺序文件的关闭
顺序文件的写操作
1.写操作(1)Write #语句格式:Write #<文件号>,[<输出列表>]功能:将<输出列表>的内容写入指定的文件中。
例:Write #1, A1, A2, A3说明:<输出列表>中各项之间要用逗号分开<输出列表>每一项可以是常量、变量或表达式写到文件中的各数据间自动插入逗号,字符串自动加上双引号所有数据写完后,在最后加入一个回车换行符不含<输出列表>时,将在文件中写入一空行12.4.2顺序文件的读写
【例12-3】建立学生成绩文件
【例12-3】建立一个新的学生成绩文件,将输入的学生成绩添加到文件中。界面如下图。CommonDialog1Text1Text2Text3Text4Command1Command2添加:工程部件选择“Microsoft Common Dialog Controls 6.0”
【例12-3】的代码实现
Private Sub Form_Load() CommonDialog1. ShowSave Open CommonDialog1.FileName For Output As #2 End Sub Private Sub Command1_Click()'添加no = Text1.Text : na = Text2.Textg1 = Val(Text3.Text) : g2 = Val(Text4.Text) Write #2, no, na, g1, g2 Text1.Text = "" : Text2.Text = ""Text3.Text = "" : Text4.Text = "" End Sub Private Sub Command2_Click()'退出 Close #2End End Sub与Append的区别?(2) Print #语句
格式:
Print #<文件号>,<输出列表>功能:将<输出列表>的内容写入指定的文件中。说明:•当<输出列表>用逗号分隔时,采用分区格式输出•当<输出列表>用分号分隔时,采用紧凑格式输出•所有项将在一行内输出,输出后将自动换行•可以使用Spc()函数和Tab()函数将例12-3中的 Write #语句改用 Print #语句: Print #2, no, na, g1, g2Print #语句生成的数据格式
用:Print #2, no; na; g1; g2生成的数据:001张三87 92002李四76 89003王五93 86用:Write #2, no, na, g1, g2生成的数据:"001","张三",87,92"002","李四",76,89"003","王五",93,86用:Print #2, no, na, g1, g2生成的数据:001张三87 92002李四76 89003王五93 86
顺序文件的读操作
2.读操作(1)
Input #语句格式: Input #<文件号>,<变量列表>功能:从文件中读取数据,按顺序给变量列表中的变量赋值。说明:常用于读取用Write语句生成的文件数据。按顺序读,每读完一条记录,记录指针向后移动一条记录。(2) Line Input #语句格式: Line Input #<文件号>,<变量名>功能:从文件中读取一行数据,作为字符串存放在<变量名>中。(3) EOF函数:EOF(<文件号>)。当到达文件结尾时,EOF函数为True。否则为False。【例12-4】读入上例生成的文件
,并计算每个学生的平均成绩,界面如下,其中,通用对话框控件用于打开一个“打开文件”对话框,在对话框中所选择的文件将作为要显示的文件。
CommonDialog1Command1Text1
【例12-4】读入上例生成的文件(代码)
Private Sub Command1_Click() CommonDialog1. ShowOpen Open CommonDialog1.FileName ForInputAs #3 Text1.Text = "" Do While NotEOF(3)'装入用 Write #语句生成的文件 Input #3, num, nam, s1, s2ave = (s1 + s2) / 2 Text1.Text = Text1.Text & num & " " & nam _& " " & Str(s1) & " " & Str(s2) & _" " & Str(ave) & Chr(13) & Chr(10) Loop Close #3 End Sub12.5 随机文件
12.5随机文件随机文件特点:读写次序任意、记录长度相等随机文件中的记录常定义为用户自定义类型。1.用户自定义类型[Private|Public] Type<自定义类型名><元素名>[(下标)]As<类型>[<元素名>[(下标)]As<类型>]…
End Type说明:(1)<自定义类型名>、<元素名>遵循变量的命名规则。(2)<类型>可以是VB系统提供的基本数据类型或已声明的自定义类型。用户自定义类型的说明
(3)缺省[Private|Public]选项时,默认为Public。必须在窗体模块或标准模块的“通用”位置的声明段进行声明。
在窗体模块中定义时必须使用Private关键字。(4)如果自定义类型的一个元素为数组,则其下标的下界不受
Option Base语句的限制。(5)在使用自定义类型前,必须先声明自定义类型的变量。(6)引用自定义类型元素,使用如下格式:<自定义类型变量名>.<元素名>定义Students类型示例
例:定义如下的Students类型用来存放学生的信息,并声明一个Students类型的变量。在窗体的Load事件过程中,实现对变量的每个元素赋值。
单击窗体输出自定义类型变量各元素的值。代码如下:
Private TypeStudentsDept As String * 20'系ClassNo As String * 10'班级Name As String'姓名Age As Integer'年龄 End Type Dim Stud AsStudents'声明一个自定义类型变量定义Students类型示例(代码2)
Private Sub Form_Load()'给变量的每个元素赋值Stud.Dept = "计算机系"Stud.ClassNo = "软件2001-1"Stud.Name = "张三"Stud.Age = 18 End Sub Private Sub Form_Click() Print Stud.Dept'输出每个元素的值 Print Stud.ClassNo, Stud.Name, Stud.Age End Sub随机文件的打开
随机文件的写操作
随机文件的读操作
2.读文件格式:Get [#]<文件号>,[<记录号>],<变量名>功能:将一个随机文件的指定记录读入变量中。
【例12-6】建立学生成绩随机文件。界面如下图。CommonDialog1Text1Text2Text3Text4
随机文件记录类型定义
Private Type StudRecNo As String * 6Name As String * 8Math As IntegerEnglish As Integer End Type Dim StudTab As StudRec Private Sub Form_Load() CommonDialog1. ShowSave Open CommonDialog1.FileName For Random _As #1 Len =Len(StudTab) End Sub随机文件记录类型定义(代码3)
Private Sub Command1_Click() StudTab.No = Text1.Text StudTab.Name = Text2.Text StudTab.Math = Val(Text3.Text) StudTab.English = Val(Text4.Text) Put #1, , StudTab Text1.Text = "" Text2.Text = ""Text3.Text = ""Text4.Text = "" End Sub Private Sub Command2_Click() Close #1End End Sub【例12-7】按记录号读取记录
【例12-7】使用例12-6建立的随机文件,按指定的记录号读取记录。Text1Text2Text3Text4Text5
【例12-7】的代码实现
Private Type StudRecNo As String * 6Name As String * 8Math As IntegerEnglish As Integer End Type Dim StudTab As StudRec Private Sub Form_Load() CommonDialog1. ShowOpen Open CommonDialog1.FileName For Random _As #1 Len = Len(StudTab) End Sub【例12-7】读记录代码
Private Sub Text1_KeyUp(KeyCode As Integer, _Shift As Integer)recno = Val( Text1.Text) If KeyCode = 13 Then'用LOF函数返回Open语句打开的文件的大小 If recno > LOF(1) / Len(StudTab) Or _recno <= 0 Then MsgBox "记录号超出范围" Text1.SetFocus Text1.SelStart = 0 Text1.SelLength = Len( Text1.Text) Exit Sub End If按记录号读取并显示记录
Get #1, recno, StudTabText2.Text = StudTab.NoText3.Text = StudTab.NameText4.Text = StudTab.MathText5.Text = StudTab.English
End If End Sub12.6 二进制文件
二进制文件的打开和关闭
12.6.1二进制文件的打开和关闭1.二进制文件的打开格式:
Open <文件名> For Binary As [#]<文件号>说明:(1) <文件名>为一字符串表达式。(2)关键字 For Binary表示打开随机文件,不能省略。(3)当使用带参数Binary的Open语句打开二进制文件时,如果文件已经存在则直接打开,否则,建立一个新的文件。例如,以二进制方式打开C盘上的文件test.txt: Open “C:\test.txt” For Binary As #1二进制文件的关闭
2.二进制文件的关闭二进制文件的关闭同样使用Close语句。例如:Close #1'表示关闭文件号为1的文件
二进制文件的读写
12.6.2二进制文件的读写1.写文件格式:Put [#]<文件号>,[<字节数>],<变量名>功能:将变量包含的数据写入二进制文件中。
说明:(1) <字节数>:表示从文件头开始的字节数,文件中的第一个字节位于位置1,第二个字节位于位置2,依此类推,文件从此位置开始写入数据;如果省略<字节数>,则数据从上次读或写的位置数加1字节处开始写入。
Put语句的变量说明
(2)<变量名>:可以是任何类型的变量。每次写入的数据长度为此数据类型所占的字节数。如果是可变长度字符串,写入的将是字符串数据,而不包括结束符,建议最好使用定长字符串读写二进制文件。
(3)可以使用Seek语句来定位读写文件的位置。Seek [#]<文件号>, <字节数>表示将文件的读写位置(指针)定位到<字节数>所指的位置处。
例如,在文件的第10个字节处写入“实验”,使用下列语句:Seek #1, 10Put #1, , "实验"
二进制文件的读操作
2.读文件Visual Basic使用Get语句从二进制文件中读取数据。格式:Get [#]<文件号>,[<字节数>],<变量名>功能:将一个已打开的二进制文件读入一个变量之中。
说明:<字节数>的含义与Put语句相同。<变量名>通常可以是任何数据类型,用于接收从二进制文件中读取的数据。
【例12-8】画点并写入文件
【例12-8】设计如下图所示的界面,不断点击“画点”按钮,画出随机生成的彩色点,同时将各点的位置和颜色值写入指定文件“C:\test.img”中,按“清屏幕”按钮清屏幕,再按“重载”按钮,屏幕将重现刚才画过的彩色点。
Command1Command2Command4Command3Command5
【例12-8】的操作步骤说明
由于本例未考虑容错问题,需要按下列步骤操作:打开文件-画点-清屏幕;打开文件-重载-关闭文件。程序代码如下:Dim c As Long'画点计数
Private Sub Command1_Click()'打开文件 Open "c:\test.img" For Binary As #1 End Sub Private Sub Command2_Click()'关闭文件 Close #1 End Sub Private Sub Command4_Click()'清屏幕 Cls Close #1 End Sub【例12-8】读文件并画点
Private Sub Command3_Click()'读文件并画点 Dim s As LongScaleWidth = 100'设置比例ScaleHeight = 100DrawWidth = 20 For i = 1 To c Get #1, , m_x'读文件 Get #1, , m_y Get #1, , m_red Get #1, , m_green Get #1, , m_blue'画点 P Set (m_x, m_y), RGB(m_red, m_green, m_blue) Next End Sub【例12-8】画点并写文件
Private Sub Command5_Click()'画点并写文件c = c + 1'画点计数ScaleWidth = 100'设置比例ScaleHeight = 100DrawWidth = 20'设置点的大小m_x = Rnd * 100'设置随机点坐标(m_x,m_y)m_y = Rnd * 100m_red = Rnd * 255'设置随机颜色m_green = Rnd * 255m_blue = Rnd * 255'画点 P Set (m_x, m_y), RGB(m_red, m_green, m_blue) Put #1, , m_x'写入文件 Put #1, , m_y Put #1, , m_red Put #1, , m_green Put #1, , m_blue End Sub本章小结
第12章 小结(续)
第12章 小结(续2)
4.顺序文件ASCII文件;只能按顺序存取记录打开:Open语句关闭:Close语句写:
Write #、Print#语句读: Input #、 Line Input #语句,Input、InputB函数5.随机文件读写次序任意、记录长度相等通常用自定义类型变量存取数据打开:Open语句关闭:Close语句写:Put语句读:Get语句第12章 小结(续3)
6.二进制文件打开:Open语句关闭:Close语句写文件:Put语句读文件:Get语句
下载地址:{{downurl}}
{{{a}}}
{{#b}}{{{b}}}
{{/b}} {{/title}} {{#nolog}}登陆注册
{{/nolog}} {{#djsx}}点我刷新
{{/djsx}} {{#gocz}} {{/gocz}} {{#ffqr}} {{/ffqr}}