Discuz! Board

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1800|回复: 2

[VB] VB6.0文件读写攻略 [复制链接]

Rank: 8Rank: 8

发表于 2012-8-25 10:43:21 |显示全部楼层
作者:iamben250

6.1 文件及其结构
6.2 顺序文件
6.3 随机文件
6.4 二进制文件
-------------------------------------------------------------------------
6.1 文件及其结构

文件:存储在外部介质上数据的集合。

按名存取

1. 记录

由若干个相互关联的数据项组成。

例如,由学生的学习成绩信息组成的记录:

2. 文件及其种类 

文件是记录的集合 

(1) 顺序文件

按顺序依次把记录写入文件;

按顺序依次把记录读出来。
 

(2) 随机文件

随机文件可以直接访问文件中的任意一个记录。

记录长度相同

根据记录号访问 

(1) ASCII码文件

数据是以ASCII码进行编码储存的。

(2) 二进制文件(Binary File)

数据是以二进制格式进行编码保存的。 

6.2 顺序文件 

1. 打开文件

Open "文件名" [For 模式] [Access 操作类型] [锁定] As [#]文件号 [Len=记录长度]

(1) 模式

OUTPUT:写操作

INPUT:读操作

APPEND:追加到文件未尾

(2) 操作类型

READ:只读

WRITE:只能写

READWRITE:读写皆可

 

(3) 锁定:用于多进程环境,是否允许其他进程对打开的文件进行 操作

Shared(缺省):共享

Lock Read:禁止其他进程对该打开的文件进行读操作

Lock Write:禁止其他进程对该打开的文件进行写操作

Lock Read Write:禁止其他进程对该打开的文件进行读写操作

(4) 文件号

1~511,可以用FreeFile函数获得下一个可利用的文件号。

(5) 记录长度

小于或等于32767的整数。

它指定数据缓冲区的大小。

例如,打开C:\VB\SCORE,供写入数据,指定文件号为#1。

命令:OPEN "C:\VB\SCORE" FOR OUTPUT AS #1

 

2. 写入命令

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

输出列表的意义同Print方法。

保存文本框

假定文本框的名称为txtTest,文件名为TEST.DAT。

方法1:把整个文本框的内容一次性地写入文件。

Open "TEST.DAT" For Output As #1

Print #1, txtTest.Text

Close #1

方法2:把整个文本框的内容一个字符一个字符地写入文件。

Open "TEST.DAT" For Output As #1

For i=1 To len(txtTest.Text)

Print #1,Mid(txtTest.Text,i,1);

Next i

Close #1

 

Write #文件号,[输出列表]

输出列表:用“,”分隔的表达式。

以紧凑格式存放,即在数据项之间插入“,”,并给字符串加上双引号。

例如,命令:Write #1,"One","Two",123

内容:"One","Two",123

3. 关闭文件

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

例如,Close #1, #2, #3

Close 关闭所有打开的文件

 

4. 读顺序文件

INPUT #文件号,变量列表

把读出的每个数据项分别存放到所对应的变量。

以“,”为分界符。

LINE INPUT #文件号,字符串变量

读一行到变量中,主要用来读取文本文件。以回车为分界符。

INPUT$(读取字符数,#文件号)

随意读取字符

5. 函数

LOF(文件号):返回文件的长度(总字节数)。

LOC(文件号):返回读写位置。

随机文件:返回最近读写的记录号;

二进制文件:返回最近读写的一个字节的位置;

 

EOF(文件号):

文件结束:返回TRUE(-1)

否则:FALSE(0)。

读文本文件到文本框

假定文本框名称为txtTest,文件名为MYFILE.TXT。

方法1:一行一行读

txtTest.Text = ""

Open "MYFILE.TXT" For Input As #1

Do While Not EOF(1)

Line Input #1, InputData

txtTest.Text = txtTest.Text + InputData+vbCrLf

Loop

Close #1

 

 

方法2:一次性读

txtTest.Text = ""

Open "MYFILE.TXT" For Input As #1

txtTest.Text = Input( LOF(1),1)

Close #1

方法3:一个个字符读

Dim InputData as String*1

txtTest.Text = ""

Open "MYFILE.TXT" For Input As #1

Do While Not EOF(1)

Input #1, InputData

txtTest.Text = txtTest.Text + InputData

Loop

Close #1 

6.3 随机文件 

1. 打开

Open "文件名" For Random As #文件号 [Len=记录长度]

2. 写操作

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

将一个记录变量的内容写到指定的记录位置处。

忽略记录号,则表示在当前记录后的位置插入一条记录。

3. 读操作

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

忽略记录号,则读出当前记录后的那一条记录。

 

 

例6.3 建立随机文件

Type Record

ID As Integer

Name As String * 20

End Type

Dim MyRecord As Record

Open "TESTFILE" For Random As #1 Len = Len(MyRecord)

For RecordNumber = 1 To 5

MyRecord.ID = RecordNumber

MyRecord.Name = "My Name"

Put #1, RecordNumber, MyRecord

Next RecordNumber

Close #1

 

例6.4 用Get命令读出上例建立的随机文件中第三条记录

Type Record

ID As Integer

Name As String * 20

End Type

Dim MyRecord As Record

Open "TESTFILE" For Random As #1 Len =Len(MyRecord)

Position = 3

Get #1, Position, MyRecord

Print Myrecord.Id Name

Close #1

 

 

6.4 二进制文件

 

1. 打开

Open "文件名" [For Binary] As #文件号

2. 写操作

Put [#]文件号,[位置],变量名

写入长度等于变量长度的数据。若忽略位置,表示从文件指针所指的位置写入数据,指针移动变量长度的位置

3. 读操作

GET [#]文件号,[位置],变量名

从指定位置开始读出长度等于变量长度的数据存入变量中,数据读出后移动变量长度位置,如果忽略位置,则表示从文件指针所指的位置开始读出数据,数据读出后移动变量长度位置。 INPUT (字节数,#文件号)

返回从文件中读出的字符串。

 

4. SEEK函数

SEEK(文件号)

随机文件:返回下一个要写入或读出的记录号;

二进制文件或顺序文件:返回下一个写入或读出的字节位置。 5. SEEK命令

Seek [#]文件号, 位置

设置下一个要写入或读出的位置。

例6.6 建立一个文件名为STUDENT.DAT二进制文件。

Sub Form_Click( )

Dim Name As String * 10

Open "Student.Dat" For Binary As #1

Do

NAME = InputBox("请输入学生姓名:")

Put #1, , NAME

YES = InputBox("继续输入吗?(Y/N)")

Loop While UCase(YES) = "Y"

Close #1

End Sub

 

例6.7 用INPUT函数读出例6.6建立的文件。

Sub Form_Click()

Dim Name As String * 10

Open "Student.Dat" For Binary As #1

Flength = Lof(1)

Char = Input(Flength, #1)

Print Char

Close #1

End Sub

使用道具 举报

Rank: 3Rank: 3

发表于 2014-4-3 05:38:15 |显示全部楼层
好帖要顶,楼主的头像还是不错滴

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

Archiver|IC Test Forum Inc.

GMT+8, 2019-3-24 14:51 , Processed in 0.360567 second(s), 12 queries .

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部