1 / 41

第七章 文件操作

《Visual Basic 程序设计 》. 第七章 文件操作. 主讲:赵娜 计算机系信息教研室. 本章主要任务: 1. 掌握文件系统的基本概念; 2. 掌握顺序文件、随机文件的特点和使用; 3. 掌握对在应用程序中不同类型文件的打开、关闭和读写操作。. 文件 是存储在外部介质上的以文件名为标识的 数据的集合 。 在Visual Basic中,文件说明的一般格式 设备名: 文件引用名 文件引用名由文件基本名和扩展名组成. 7.1 文件概念. 文件的结构 文件 记录 字段 字符. 表 7-1 居民区人员登记表( jmdjb.dat ).

Download Presentation

第七章 文件操作

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 《Visual Basic程序设计》 第七章 文件操作 主讲:赵娜 计算机系信息教研室

  2. 本章主要任务: 1.掌握文件系统的基本概念; 2.掌握顺序文件、随机文件的特点和使用; 3.掌握对在应用程序中不同类型文件的打开、关闭和读写操作。

  3. 文件是存储在外部介质上的以文件名为标识的数据的集合。文件是存储在外部介质上的以文件名为标识的数据的集合。 在Visual Basic中,文件说明的一般格式 设备名:\文件引用名 文件引用名由文件基本名和扩展名组成 7.1 文件概念

  4. 文件的结构 文件 记录 字段 字符 表7-1 居民区人员登记表(jmdjb.dat)

  5. 根据文件中存储信息所使用的编码方式,可以将文件分为二进制文件和ASCII文件。 根据文件的性质,可以把文件分为程序文件和数据文件两大类。

  6. 1.顺序文件(Sequential File) 结构比较简单,文件中的数据是按顺序组织的文本行,每行即为一个数据记录,每行长度可以变化,行之间以换行符作为分隔符。 2.随机文件(Random Access File) 由一组长度完全相同的记录组成。记录与记录之间不需要分隔符号。一般以二进制形式存放,每个记录包含一个或多个字段。可以按任意次序读写。 3.二进制文件(Binary file) 最原始的文件类型,它直接把二进制码存放在文件中,没有固定的格式。二进制访问模式以字节数来定位数据,允许在程序中按任何方式组织和访问数据,占用空间较小,存取灵活。 按照文件的存取方式和组成,把文件分为以下三类:

  7. 6.2.1顺序文件的打开与关闭 1. 打开顺序文件 在对文件进行任何操作之前,必须先打开文件,同时通知操作系统对文件进行读操作还是写操作。 Open 文件名For 打开方式As # <文件号>[Len=缓冲区大小] 文件名可以是字符串常量,也可以是字符串变量。 “打开方式”为下列三种形式之一: Output:对文件进行写操作。 Input:对文件进行读操作。 Append:对文件末尾追加记录,使原有内容不被擦除,新记录加在其后。 6.2 顺序文件

  8. 注意:使用Output方式打开一个存在的文件,将会创建一个新的顺序文件,磁盘上原有的同名文件将会被覆盖,其中的数据将全部丢失。注意:使用Output方式打开一个存在的文件,将会创建一个新的顺序文件,磁盘上原有的同名文件将会被覆盖,其中的数据将全部丢失。 (2)文件号是一个介于1~511之间的整数。当打开一个文件并为它指定一个文件号后,该文件号就代表文件,直到文件被关闭后,此文件号可以再被其它文件使用。 在复杂的应用程序中,可以利用FreeFile函数获得可利用的文件号。

  9. 关闭文件所用的语句是Close。 格式:Close [[#]文件号][,[#]文件号] 例如,Close #1,#2,#3 是关闭1号,2号和3号文件的命令。如果省略了文件号,Close命令将会关闭所有已经打开的文件。 2. 关闭顺序文件

  10. (1)Print # 语句 格式:Print # <文件号>[,<输出列表>] 用于将格式化显示的数据写入顺序文件中。 (2) Write # 语句 格式:Write #<文件号>[,<输出列表>] 用于将划分了字段的记录格式的数据写入文件 。 6.2.2顺序文件的读写操作1.写操作

  11. Open "E:\VB\Exercise.TXT" For Output As #1 ‘打开文件以便输出 Print #1,”顺序文件写入数据测试” ‘向文件中写入字符串”This is a test” Print #1, ‘输出一个空行 Print #1,”Zone 1”;Tab;”Zone 2” ‘在两个打印区输出 Print #1,Spc(5);”5 leading spaces” ‘先输出5个空格,再输出字符串 Print #1,Tab(10);”Hello” ‘在第10列上输出字符串 Close #1 ‘关闭文件 例用Print 语句把数据写入文件

  12. Private Sub Form_Load() Dim i As Integer, s As String Dim d As Date, b As Boolean i = 125: s = "programming": d = Date: b = True Open "d:\vb\example.txt" For Output As #1 Write #1, i, s, d, b Write #1, "使用Write语句向顺序文件中写入数据示例" Close #1 End Sub 例 用Write 语句把数据写入文件

  13. Write 的功能基本上与Print 语句相同,不同的是,数据写入文件时是以紧凑格式存放的,也就是说,使用Write语句,数据项之间会以 “,”自动隔开,并自动给字符串加上双引号。 Write语句在将输出列表中的最后一个字符写入文件后会插入回车换行符。 Write 语句与Print 语句比较

  14. (1)LOF()函数 LOF()函数将返回文件的字节数。例如,LOF(1)返回#1文件的长度,如果返回0,则表示该文件是一个空文件。 (2)EOF()函数 EOF()函数将返回一个表示文件指针是否达到文件末尾的值。当到文件末尾时,EOF()函数返回True,否则返回False。对于顺序文件用EOF()函数可以测试是否到文件末尾。对于随机文件和二进制文件,当最近一个执行的Get语句无法读到一个完整记录时返回True,否则返回到False。 (3)LOC()函数 LOC()函数将返回在一个打开文件中读写的记录号;对于二进制文件,它将返回最近读写的一个字节的位置。 与文件读操作有关的其他重要函数

  15. 1.Line Input #语句 每次从顺序文件中读取一行信息,并赋值给一个字符串变量,语法格式如下 Line Input #文件号,字符串变量 2.读操作顺序文件读文件的操作方式有如下三种:Line Input # 语句Input # 语句Input 函数

  16. 【7-3】对于例7-1所建立的文件,可以使用Line Input #语句将数据读出,并显示在窗体中。 Private Sub Form_Click() Dim st As String, x As String Open "d:\vb\exercise.txt" For Input As #1 While Not EOF(1) Line Input #1, x ‘每次从文件中读一行信息 st = st & vbCrLf & x ‘使用vbCrLf实现换行显示 Wend Close #1 Print st End Sub

  17. 9.3 顺序文件 2.Input #语句Input #语句从一个打开的顺序文件中读出数据,并赋值给指定的变量,其语法格式如下: Input #文件号,变量列表

  18. 格式: Input (<读取的字符数>,#<文件号>) 功能: 调用该函数可以读取指定数目的字符,以字符串形式返回。 9.3 顺序文件 (3)Input函数

  19. 【例7-4】新建立一个工程文件,并按照下列要求进行操作:在名称为Form1的窗体上画一个文本框,名称为Text1,允许多行显示;再画三个命令按钮,名称分别为C1,C2,C3,标题分别为“输入”,“转换”,“存盘”。请编写适当的事件过程,使得在运行时,单击“输入”按钮,从D盘VB文件夹中读入in5.txt文件(文件中只有字母和空格),放入Text1中;单击“转换”按钮,则把Text1中的所有小写字母转换为大写字母;单击“存盘”按钮,则把Text1中的内容存入out5.txt文件中。【例7-4】新建立一个工程文件,并按照下列要求进行操作:在名称为Form1的窗体上画一个文本框,名称为Text1,允许多行显示;再画三个命令按钮,名称分别为C1,C2,C3,标题分别为“输入”,“转换”,“存盘”。请编写适当的事件过程,使得在运行时,单击“输入”按钮,从D盘VB文件夹中读入in5.txt文件(文件中只有字母和空格),放入Text1中;单击“转换”按钮,则把Text1中的所有小写字母转换为大写字母;单击“存盘”按钮,则把Text1中的内容存入out5.txt文件中。

  20. Private Sub Form_Click() Dim x As Single,amax As Single,amin As Single Dim i As Integer Open "in.txt" 【1】 As #1 Input #1,x amax=x amin=x i=2 Do While i<=100 Input #1,x Print x; If amax<x Then amax=x End If If amin>x Then amin=x End If i=i+1 Loop Close #1 Print amax,amin Open "out.txt" 【2】 As #2 【3】 amax,amin close #2 End Sub 左边程序的功能是:从文件in.txt中读取100个学生的数学成绩,将其中的最高分数和最低分数写到文件out.txt中。请将程序填完全。 【1】A) Input B) For Input C) For Output D) Output B 【2】A) For Output B) For Input C) Output D) Input A 【3】A) Write B) Print C) Write #2 D) Print #2, D

  21. 下列程序代码是通过打开顺序文件DATA.TXT,读取文件中的数据,并在窗体上显示。完善该程序,实现上述功能。下列程序代码是通过打开顺序文件DATA.TXT,读取文件中的数据,并在窗体上显示。完善该程序,实现上述功能。 Private Sub Command12_Click() Dim StuName As String, StuXb As String, StuScore As Single Open "d:\vbtest\data.txt" For 【1】 As #1 Do While 【2】 【3】, StuName, StuXb, StuScore Print StuName, StuXb, StuScore Loop Close #1 End Sub 【1】A) Append B) Input C) Random D) OutPut B 【2】A) Not EOF(1) B) EOF(1) C) LOF(1) D) Not LOF(1) A 【3】A) Input #1 B) Read #1 C) Get #1 D) Line Input #1 A

  22. 在随机访问模式中,文件的存取是按记录进行操作的,每个记录都有记录号并且长度全部相同。那么无论是从内存向磁盘写数据或从磁盘读数据,都需要事先定义内存空间。而内存空间的分配是靠变量说明来进行的,所以不管是读操作还是写操作,都必须事先在程序中定义变量,变量要定义成随机文件中一条记录的类型,一条记录又是由多个数据项组成的。因此在程序的变量说明部分采用用户自定义的类型说明语句,首先定义记录的类型结构,然后再将变量说明成该类型,这样就为这个变量申请了内存空间用于存放随机文件中的记录。在随机访问模式中,文件的存取是按记录进行操作的,每个记录都有记录号并且长度全部相同。那么无论是从内存向磁盘写数据或从磁盘读数据,都需要事先定义内存空间。而内存空间的分配是靠变量说明来进行的,所以不管是读操作还是写操作,都必须事先在程序中定义变量,变量要定义成随机文件中一条记录的类型,一条记录又是由多个数据项组成的。因此在程序的变量说明部分采用用户自定义的类型说明语句,首先定义记录的类型结构,然后再将变量说明成该类型,这样就为这个变量申请了内存空间用于存放随机文件中的记录。 6.3 随机文件

  23. 1.打开随机文件 格式: Open 文件名For Random As # 文件号[Len=记录长度] 其中:文件名可以是字符串常量,也可以是字符串变量。文件以随机访问模式打开后,可以同时进行读或写的操作。在Open语句中要指明记录的长度,记录长度的默认值是128个字节。 例如,用随机方式打开D盘根目录下MyDoc文件夹中的MyData1.txt文件,记录长度为100个字节: Open "D:\MyDoc\Mydata1.txt " For Random As #1 Len=100 2.关闭随机文件 与关闭顺序文件相同,仍用Close语句。 6.3.1随机文件的打开与关闭

  24. 1.写操作 随机文件的写操作使用Put 命令。 格式:Put # <文件号> ,[<记录号>], <表达式> 其中:<记录号>指定写到文件中的几个记录上。如果省略,则表示在当前记录后插入一条记录。记录号应为大于1的整数。 <表达式> 是要写入文件的数据,可以是变量。 Put 命令将表达式的值写入由记录号指定的记录位置处,同时覆盖原记录内容。随机文件的操作不受当前文件中的记录数的限制。 6.3.2 随机文件的读写操作

  25. 随机文件的读操作使用Get命令。 格式:Get # 文件号,[<记录号>] ,变量名 Get命令将指定的记录内容存放到变量中。记录号为大于1的整数。如果省略记录号,则表示读取当前记录。 2.读操作

  26. 例:有一随机文件Data.txt,其记录包含三个字段StuNo、StuName、StuScore类型定义如程序描述。下列程序代码是打开该随机文件,通过文本框Text1、Text2和Text3分别输入学生的学号(StuNo)、姓名(StuName)和成绩(StuScore),并添加到随机文件中,而后关闭该文件。完善该程序,实现上述功能。例:有一随机文件Data.txt,其记录包含三个字段StuNo、StuName、StuScore类型定义如程序描述。下列程序代码是打开该随机文件,通过文本框Text1、Text2和Text3分别输入学生的学号(StuNo)、姓名(StuName)和成绩(StuScore),并添加到随机文件中,而后关闭该文件。完善该程序,实现上述功能。 记录的自定义类型如下: Public Type student StuNo As String * 6 StuName As String * 6 StuScore As Single End Type

  27. Private Sub Command1_Click() Dim Stud As student Open "d:\data.txt" For 【1】As #1 Len = 【2】 Stud.StuNo = Text1.Text Stud.StuName = Text2.Text Stud.StuScore = Val(Text3.Text) N = Int(LOF(1) / Len(Stud)) + 1 【3】, N, Stud Text1 = "": Text2 = "": Text3 = "" Text1.SetFocus Close #1 End Sub 【1】A) Append B) Input C) Random D) OutPut C 【2】A) Len(Student) B) Len(Stud) C) Stud D) Student B 【3】A) Put #1 B) Input #1 C) Get #1 D) Write #1 A

  28. 1.打开文件 格式:Open 文件名For Binary As # 文件号 注意:以二进制方式访问文件不指定记录长度。 2.关闭文件 关闭打开的二进制文件仍用Close命令。 6.4 二进制文件 6.4.1打开与关闭二进制文件

  29. 1. 写操作 格式:Put #<文件号>,[<位置>],<变量名> 功能:Put命令从<位置>指定的字节数后开始,一次写入长度等于变量长度的数据,如果忽略<位置>,则表示从文件指针所指的当前位置开始写入。 2.读操作 格式:Get #<文件号>,[<位置>],<变量名> 功能:Get命令从指定位置开始读取长度等于变量长度的数据,并存放到变量中,如果省略位置,则从文件指针所指的位置开始读取,数据读出后移动变量长度的位置。 6.4.2二进制文件读写操作

  30. 文件的位置 • 每个打开的二进制文件都有自己的文件指针,文件指针是一个数字值,指向下一次读写操作在文件中的位置。

  31. 6.5.1文件操作语句 1.FileCopy语句 格式:FileCopy 源文件名,目标文件名 功能:复制一个文件。 举例: FileCopy "D:\Myfile\ABC.doc ", "A:\ABC.doc" ′将D盘Myfile文件夹中的ABC.doc 文件复制到A盘的ABC.doc文件中。 注意:FileCopy语句不能复制一个已打开的文件,否则,将会产生一个错误。

  32. 格式:Kill 文件名 功能:从磁盘中删除文件。 举例:Private Sub Command1_Click() answer=MsgBox"确定要删除文件吗?",vbYesNo, "请确认") If answer=vbYes Then Kill "D:\Myfile.dat" End Sub 注意:因为在使用Kill语句删除文件时不会出现任何提示,所以应在程序中加上适当的代码以提示用户确认后再删除。 2.Kill语句

  33. 3.Name语句 格式:Name 旧文件名As 新文件名 功能:重新命名一个文件、目录或文件夹。 举例: Name "D:\Myfile\ABC.doc"As"C:\New\ABC.doc" ′将D盘Myfile文件夹中的ABC.doc 文件移到C盘New文件夹中并更名为ABC.doc。 注意: (1)该语句应指定已存在的新、旧文件名和位置,不能使用通配符"*"和"?"。 (2)该语句不能创建新文件、目录或文件夹。 (3)该语句不能重新命名一个已打开的文件,否则,将会产生一个错误。

  34. 4.ChDrive语句 格式:ChDrive 驱动器名 功能:改变当前的驱动器的位置。 举例:ChDrive "D"与ChDrive "D:\ "都是将当前的驱动器设为D盘。 注意:驱动器名如果是一个空字符串" ",则当前的驱动器将不会改变。

  35. 5.ChDir语句 格式:ChDir 路径 功能:改变当前的目录或文件夹。 举例:ChDir "D:\Myfile" 注意:ChDir 语句改变默认的目录位置,但不会改变默认驱动器的位置。如果默认的驱动器是C盘,那么上面的语句改变的只是驱动器D上的默认目录,而C盘仍是默认的驱动器。 6.MkDir语句 格式:MkDir 路径 功能:创建一个新的目录或文件夹。 举例:MkDir "D:\Myfile\ABC" '在D盘的Myfile文件目录中名为ABC的子目录。 注意:如果没有指定驱动器,则MkDir会在当前的驱动器上创建新的目录或文件夹。

  36. 7。RmDir语句 格式:RmDir路径 功能:用于删除一个存在的空的目录或文件夹。 举例:RmDir "D:\Myfile\ABC" '删除D盘的Myfile文件目录中名为ABC的空子目录。 注意:RmDir只能删除空子目录,否则,将会产生一个错误。在试图删除目录或文件夹之前,可先用Kill语句删除所有的文件,再用RmDir语句删除它的上一级目录。

  37. 1. CurDir函数 功能:获得当前目录。 调用格式:CurDir(文件名) 说明:返回一个Variant(String),用来表示当前路径。 2.GetAttr函数 功能:获得文件属性。 调用格式:GetAttr(文件名) 3.FileDateTime函数 功能:获得文件的日期和时间。 调用格式:FileDateTime(文件名) 说明:返回一个文件最初创建或最后修改的日期和时间。 6.5.2 文件操作函数

  38. 4.FileLen函数 功能:获得文件的长度,单位是字节。 调用格式:FileLen(文件名) 注意:返回一个Long,文件打开时调用FileLen函数,则返回的值是文件打开之前的长度。

  39. (一)文件的概念 VB中根据访问模式将文件分为:顺序文件、随机文件、二进制文件。顺序文件可以按行、按字符和整个文件一次性读三种方式读出;随机文件以记录为单位读出;二进制文件以字节为单位读出。 本章小结

  40. 顺序文件结构简单,其中记录的写入、存放、读取顺序都是一致的,也就是说记录的逻辑顺序与物理顺序相同。顺序文件可以用普通的字处理软件(如:记事本)进行建立、显示和编辑。顺序文件结构简单,其中记录的写入、存放、读取顺序都是一致的,也就是说记录的逻辑顺序与物理顺序相同。顺序文件可以用普通的字处理软件(如:记事本)进行建立、显示和编辑。 1。打开顺序文件:Open文件名For模式As[#]文件号[Len=记录长度] 2.写语句格式:Print # <文件号>,[<输出列表>] 或Write # <文件号>,[<输出列表>] 3.读语句格式:Get # 文件号,[<记录号>] ,变量名 4.关闭文件格式:Close [[#]文件号][,[#]文件号]…… 常用函数:LOF()函数、EOF()函数和Loc()函数。 本章小结 (二) 顺序文件及操作

  41. 随机文件由一组长度完全相同的记录组成。每个记录都有惟一的记录号。随机文件以二进制形式存放数据。随机文件适宜对某条记录进行读写操作。随机文件由一组长度完全相同的记录组成。每个记录都有惟一的记录号。随机文件以二进制形式存放数据。随机文件适宜对某条记录进行读写操作。 1.打开随机文件格式:Open 文件名For Random As # 文件号[Len=记录长度] 2.写语句格式: Put # <文件号> ,[<记录号>] ,<表达式> 3.读语句格式: Get # 文件号,[<记录号>] ,变量名 4.关闭文件格式:Close [[#]文件号][,[#]文件号]…… 本章小结 (三) 随机文件及操作

More Related