vb6读写⽂件
'---------------------------------
'write file
Dim nHandle As Integer, fName As String
fName = "d:\1.txt"
nHandle = FreeFile
Open fName For Output As #nHandle
Print #nHandle, "0"
Print #nHandle, "2"
Close nHandle
'----------------------------------
'read file
nHandle = FreeFile
Open fName For Input As #nHandle
cnt = 0
Do Until EOF(nHandle)
Line Input #nHandle, NewLine
Debug.Print NewLine
Loop
Close nHandle
----------------------------------------------------------------
总结⼀下VB6的⽂件操作,省得要⽤的时候⼜到处查。
⼀、⽂件类型
1、顺序⽂件(⽂本⽂件):以ASCII码形式存放的⽂件。似乎还有Unicode码存放的,有没有BCD码的呢?
2、随机访问⽂件:这种⽂件格式很有特点:⽂件中存放若⼲条等长的单元(也可以说是记录);每个单元包含同类型、等数量、等长度的数据项;⽂件中,除了字符串以ASCII码存放之外,其它都以⼆进制形式直接存放,节省存储空间。这种⽂件类型⾮常适合存储需要和软件交互的数据,如结构体数据、类数据等。这也是VB特有的⽂件访问⽅式。
3、⼆进制⽂件:以⼆进制形式存放,PE程序⽂件⼀般都是这个类型。
⼆、操作⽅法
1、顺序⽂件
打开: Open ⽂件名 For Input | Output | Append As [#]⽂件号
Input打开读⼊,⽂件不存在报错。Output打开覆盖写⼊,⽂件不存在则创建。Append打开追加写⼊,⽂件不存在则创建。
读: Line Input #⽂件号, 字符串变量
读⼀⾏数据存⼊字符串变量,数据包括空格、Tab、等,不包括回车符和换⾏符,所以要显⽰⽂件的换⾏效果,要⼿动添加回车符和换⾏符(vbCrLf)
Input #⽂件号, 变量1[, | ;] [变量2]...
这种⽅式可以存⼊多个变量,⽽且变量类型不限于字符串型。
写: Print #⽂件号, 参数1[, | ;] [参数2]...
将各参数逐个写⼊⽂件。参数间⽤逗号隔开时,⽂件中相应插⼊多个空格;⽤分号隔开时,插⼊⼀个空格。可以⽤Spc(n)、Tab(n)等进⾏排版。 Write #⽂件号, 参数1[, | ;] [参数2]...
这种写⼊⽅式将⾃动添加界定符,对不同参数的类型加以界定。
2、随机访问⽂件
打开: Open ⽂件名 [For Random] As [#]⽂件号 Len = 记录长度
For Random可以省略,⽂件不存在则创建,读写都是这种打开⽅式。 Len是⽂件中记录的⼀条长度,
⽤以识别记录的开始与结束,经常⽤Len(记录名)来获取长度。
读: Get [#]⽂件号, [记录号], 变量
读⼀条记录存⼊变量,可以是系统类型的Integer、Single、String等等,也可以是⾃定义类型结构体、类等。记录号省略时从打开以后最后⼀次读取的末端开始读取记录。
写: Put [#]⽂件号, [记录号], 表达式
将表达式中的数据写⼊⽂件,表达式可以是各种变量的组合,中间⽤逗号隔开。该组数据写⼊记录号对应的位置,记录号省略时从打开以后最后⼀次写⼊的末端开始写⼊记录。
3、⼆进制⽂件
打开: Open ⽂件名 For Binary As [#]⽂件号
⽂件不存在则创建,读写都是这种打开⽅式。当然也可以⽤来打开⽂本⽂件,读出来将不知所云
读⼀条记录存⼊变量,可以是系统类型的Integer、Single、String等等,也可以是⾃定义类型结构体、类等。记录号省略时从打开以后最后⼀次读取的末端开始读取记录。
读: Get [#]⽂件号, [读位置], 变量
从“读位置”开始读取数据,读⼊的长度等于变量的长度,⼀次读⼀个。“读位置”以字节为单位。“读位置”省略时从打开以后最后⼀次写⼊的末端开始读⼊。
写: Put [#]⽂件号, [写位置], 表达式
将表达式中的数据写⼊⽂件,表达式可以是各种变量的组合,中间⽤逗号隔开。该组数据写⼊“写位置”,“写位置”以字节为单位。“写位置”省略时从打开以后最后⼀次写⼊的末端开始写⼊。
三、操作权限
使⽤Input、Binary、Random模式访问,可以同时对单个⽂件打开多个实例。使⽤Append和Output模式之前则必须确定⽂件
Open ⽂件名 For 模式 [Access access] [lock ] As [#]⽂件号 [len = 记录长度]
对随机存储⽂件和⼆进制⽂件,可以设置⽂件的读写权限。access可写成Read、Write、 Read Write,对应只读、只写、读写兼备。此项功能不适⽤于顺序⽂件。
Lock | Unlock ⽂件号, [记录| [起始记录 To终⽌记录]]
当指明lock标识后,可⽤以上代码设置⽂件的共享权限。对顺序⽂件, [记录| [起始记录 To终⽌记录]]不起作⽤,将对整个⽂件⽣效;对随机存储⽂件,将对记录标识中的部分进⾏权限锁定或解锁。
四、⽂件操作函数
以上部分可以实现⽂件操作的⼀些功能,但要完成如拷贝整个⽂件、查⽂件是否已建⽴、取⽂件长度等功能,还需要⼀些⽂件操作函数来⽅便地实现。
Seek: Seek(⽂件号)
返回⽂件正在访问的位置,返回值为长整型。对顺序⽂件和⼆进制⽂件,返回值以字节为单位;对随机访问⽂件,返回值以记录号为单位。Seek: Seek [#]⽂件号,位置
定位⽂件到指定位置。位置单位同上所述。
Input: Input (字节数,[#]⽂件号)
从⽂件的访问当前位置读⼊指定字节数的数据。仅适⽤于顺序⽂件和⼆进制⽂件。
EOF: EOF(⽂件号)
判断⽂件的访问位置是否在⽂件尾,如果是,返回True,否则,返回False。
LOF: LOF(⽂件号)
返回⽂件长度,单位为字节。
FileLen: FileLen (⽂件名)
返回⽂件名对应⽂件的长度,单位是字节。该函数取磁盘⽂件标识中的长度,即⽂件打开前的长度,可以取未打开的⽂件长度。
GetAttr: GetAttr (Pathname)
返回指定⽂件或⽂件夹的属性。
FileAttr: FileAttr (⽂件号)
返回⽂件号对应⽂件的打开⽅式。
GetDateTime: GetDateTime (Pathname)
返回⽂件被创建或修改的最后⽇期和时间。
Free: FreeFile[(0|1)]
返回未被占⽤的⽂件号,Free或Free(0)返回1~255之间未占⽤的⽂件号,Free(1)返回256~511之间未占⽤的⽂件。
Dir: Dir (Pathname [,Attributes])
测试指定路径是否有某⽂件,Attributes附加⽂件属性条件,取值vbNormal、vbReadOnly、vbHidden、vbSystem、vbVolume、vbDirectory。Kill: Kill (⽂件名)
删除指定⽂件,⽂件名可包含路径。
FileCopy: FileCopy 源⽂件,⽬标⽂件
拷贝⽂件。
Name: Name 旧⽂件名 As 新⽂件名
⽂件重命名。前后路径不⼀致时,操作为移动⽂件并重命名。
MkDir: MkDir path
write的返回值新建⽂件夹。
RmDir: Rmdir path
删除⽂件夹。
ChDrive: ChDrive Drive
改变当前驱动器 ChDrive "D"
CurDir: CurDir [(driver)]
返回当前⼯作路径,指定driver则返回⽬标驱动器的当前⼯作路径。
五、⽂件操作实战
1、新建⽂本⽂件a.txt,写⼊数据,关闭。打开该⽂件,全部读⼊到新建⽂件b.txt,关闭。
'新建⽂件,并写⼊数据,关闭
Open "a.txt" For Output As #1
Print #1, "ABCDEFG"; vbCrLf; "HIJK"
Close #1
'打开⽂件,并全部写⼊新⽂件,关闭
Open "a.txt" For Input As #2
Open "b.txt" For Output As #3
Dim str As String
While (Not EOF(2))
Line Input #2, str
Print #3, str
Wend
Close
2、新建随机存储⽂件a.dat,写⼊数据,关闭。打开该⽂件,读⼊到新建⽂件b.dat,关闭。
'以下代码位于Module模块
'定义⾃定义类型结构体
Public Type Struct
elem1 As Integer
elem2 As String * 5
End Type
'以下代码位于窗体模块
'新建⽂件,并写⼊记录,关闭
Open "a.dat" For Random As #1 Len = Len(st)
Put #1, , st
Close #1
'打开⽂件,并写⼊新⽂件,关闭
Open "a.dat" For Random As #2 Len = Len(st) Open "b.dat" For Random As #3 Len = Len(st)
Dim st2 As Struct
Get #2, , st2
Put #3, , st2
Close
3、⼆进制⽂件操作类似于随机存储⽂件,不再举例。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论