文档库 最新最全的文档下载
当前位置:文档库 › vb文件处理参考

vb文件处理参考

1、顺序文件

顺序文件的读取有三种方式:

(1)Line Input # 语句

该语句从打开的顺序文件中读取一行数据。这里的一行指的是从当前指针位置开始到回车符或回车换行符之间的所有数据。Line Input # 语句的语法格式如下:

Line Input # 文件号,变量号

说明:“文件号”是打开文件时所用的文件号;“变量号”使用来存放读出数据的一个或多个变量,如果有多个变量,中间用空格分割开。Input# 语句为参数列表中的每一个变量读取文件的一个域,并将读出的域存入变量中。该语句只能顺序的从第一个域开始,直到读取想要的域。

请看下面代码:

Dim strLine As String

Open "c:\vb\test.txt" For Input As #1

Do Until EOF(1)
 Line Input #1, strLine
 text1.Text = text1.Text + strLine + Chr(13) + Chr(10)
Loop

Close #1

此段代码逐行读取一个文件到文本框中。

(2)Input函数

此函数可以从顺序文件中一次读取指定长度的字符串。具体地说,就是从文件的当前位置开始,读取指定个数的字符,然后将他们返回。Input函数可以读取包括换行符,回车符,空格符等在内的各种字符。下面是它的语法格式:

变量 = Input(串长度,文件号)

例如,要从一个打开文件中读取12个字符并复制到变量file中,我们可以这样写:

file = Input(12,filenum)

如果要将整个文件复制到变量,请使用InputB函数将字节从文件复制到变量。由于InputB函数返回一个ASCII字符串,因此,必须用StrCopy函数将ASCII字符串转换为Unicode字符串。代码如下:

file = StrCopy (Input (LOF(filenanum),filenum),vbUnicode)

(3)Input # 语句

Input #语句可以从文件中同时向多个变量内读入数据,而且读入的数据可以是不同类型的。
 
下面使它的语法格式:

Input # 文件号,变量列表

例如,我们要在文件student.txt中写入数据,下面是代码:

Open "student.txt" For Output As #filenum

Write #filenum, "张三", "初一年级", 14
Write #filenum, "李四", "职业高中", 18

Dim name As String, nianji As String, age As Integer
Dim name1 As String, nianji1 As String, age1 As Integer
Open "student.txt" For Input As #filenum
Input #filenum, name, nianji, age
Input #filenum, name1, nianji1, age1
Close #filenum

执行结果:

name=”张三” ,nianji = “初一年级” ,age =14

name=”李四” ,nianji = “职业高中” ,age =18

2、随机文件

读取随机文件是可以使用Get # 语句,数据从文件的一个指定记录中读出后,存入一个用户自定义的变量中.

语法格式: Get # FileNum ,[RecNum],UserType

说明:

(1)FileNum 是要

打开的文件号;RecNum是要读取的记录号,若省略,则读取下一个记录

(2)UserType 是一个用来存放读出数据的用户自定义的数据类型变量.

下面是一个例子:

Get # 1,5,Student

该语句读取文件号为1的文件中的第5条记录.

3、二进制文件

读写二进制文件的方法和读写随机文件的方法基本相同,下面是相关的语句格式及其说明:

格式: Get [#]fileNumber ,[Pos], Var

功能: 用二进制方式,从文件的中指定的位置开始读取,所给变量长度的数据

说明:

(1)FileNumber是以二进制方式打开的文件号.

(2)Pos用来指定读写操作发生时的字节位置,若省略,则使用当前文件指针位置.

(3)Var是用来存放读出的数据的变量.该语句会自动根据var变量包含的字节长度读取适当的文件,如果Var是一个可变长度的字符串变量,则传送的字节数等于Var中目前的字节数.对于文件长度的判断我们可以使用Lof()函数,Eof()函数检查文件的结尾位置.

下面的代码复制studert.txt文件到student1.txt文件中

Dim ar As String * 1, i As Integer
Open "c:\student.txt" For Binary As #1
Open "c:\student2.txt" For Binary As #2
For i = 1 To LOF(1)
 Get #1, , ar
 Put #2, , ar
Next i

Close #1, #2
(三)写文件

1、 顺序文件

写顺序文件我们可以用Write # 和Print #语句向一个已经打开的文件中写入数据.

下面是他们的格式和说明:

Print # 的语法格式:

Print # 文件号,变量列表

例如,将文本框中的文本写到文件中,代码如下:

Open "file.txt" For Output As #filenum

Input #filenum, text1.text

Write # 语句的语法格式:

Write # 文件号,变量列表

说明:用Write # 语句写入的信息便于以后用Input #语句来读取数据,因为Write #语句自动将写入到文件中的信息用逗号分开,并为字符串数据加上双引号.例如:

Open "student.txt" For Output As #filenum

Write #filenum, "张三", "初一年级", 14
Write #filenum, "李四", "职业高中", 18

2、 随机文件

向随机文件中写入数据,使用Put #语句.语法格式如下:

Put [#] FileNum ,[RecNum],UserType

说明:

(1) FileNum 是要打开的文件号;RecNum是要写入的记录号,若省略,则再上一次用Get 和Put语句所读写过的记录的后一条记录中写入,如果没有执行过Get 和Put语句,就从第一条记录开始

(2)UserType 是包含要写入数据的用户自定义的数据类型变量.例如:我们向前面的student.txt文件中的第5个记录写入数据,可用这些语句:

stud.No = 0301
https://www.wendangku.net/doc/d016088461.html, = “王武”
stud.Age =20
Put #1 ,5,stud

如果要插入的数据不只一两条的话,首先要确定文件和每条记录的长度,

这样就可以计算出文件中究竟有多少条记录.我们可以用Lof()函数返回文件的长度,Len()函数返回每个记录的长度,计算文件中的记录个数可以用文件的长度除以给个记录的长度.示例如下:

Nextrec= (Lof(1)\Len(UserType))+1

Put #1,Nextrec,UserType

3、二进制文件

下面是以二进制方式写入文件的语句格式及其说明:

格式:

Put [#]fileNumber ,[Pos], Var

功能: 用二进制方式,从文件的中指定的位置开始写入,所给变量长度的数据

说明:

(1)FileNumber是以二进制方式打开的文件号.

(2)Pos用来指定写操作发生时的字节位置,若省略,则使用当前文件指针位置.

(3)Var是用来存放写入的数据的变量.该语句会自动根据var变量包含的字节长度写入文件,如果Var是一个可变长度的字符串变量,则传送的字节数等于Var中目前的字节数.

使用方法可参考二进制文件的读操作.

下面是windows中提供的对于文件进行操作的API函数及其功能:

Windows API函数 功能
CloseHandle 关闭一个内核对象。其中包括文件、文件映射、进程、线程、安全和同步对象等。涉及文件处理时,这个函数通常与vb的close命令相似。应尽可能的使用close,因为它支持vb的差错控制。注意这个函数使用的文件句柄与vb的文件编号是完全不同的
CompareFileTime 根据FILETIME结构的信息,对比两个文件的时间
CopyFile 复制文件。与vb的filecopy命令相似
CreateFile 这是一个全功能的函数,可打开和创建文件、管道、邮槽、通信服务、设备以及控制台
DeleteFile 删除指定文件
FindClose 关闭由FindFirstFile函数创建的一个搜索句柄
FindFirstFile 根据文件名查找文件
FindNextFile 根据调用FindFirstFile函数时指定的一个文件名查找下一个文件
FlushFileBuffers 针对指定的文件句柄,刷新内部文件缓冲区
GetBinaryType 判断文件是否可以执行
GetFileAttributes 判断指定文件的属性
GetFileInformationByHandle 这个函数提供了获取文件信息的一种机制——在一个BY_HANDLE_FILE_INFORMATION结构中装载与文件有关的信息
GetFileSize 判断文件长度
GetFileTime 取得指定文件的时间信息
GetFileType 在给出文件句柄的前提下,判断文件类型
GetFileVersionInfo 从支持版本标记的一个模块里获取文件版本信息
GetFileVersionInfoSize 针对包含了版本资源的一个文件,判断容纳文件版本信息需要一个多大的缓冲区
GetShortPathName 获取指定文件的短路径名
GetTempFileName 这个函数包含了一个临时文件的名字,它可由应用程序使用
lclose 关闭指定的文件,请参考CloseHandle函数,了解进一步的情况
lcreat 创建一个文件。如文件已经存在,就会将其缩短成零

长度,并将其打开,以便读写
llseek 设置文件中进行读写的当前位置。该函数与vb的seek语句类似。如果用vb的open命令打开了一个文件,那么不要再对这个文件使用llseek函数
LockFile 在windows中,文件可用共享模式打开——在这种情况下,多个进程可同时访问该文件。利用这个函数,要对文件进行读写的一个应用程序可将文件的某一部分锁定起来,使其不能由其他应用程序访问。这样便避免了同时读写时发生的冲突
LockFileEx 与LockFile相似,只是它提供了更多的功能
lopen 以二进制模式打开指定的文件
lread 将文件中的数据读入内存缓冲区
lwrite 将数据从内存缓冲区写入一个文件
MoveFile, MoveFileEx 移动文件。如dwFlags设为零,则MoveFile完全等价于MoveFileEx
OpenFile 这个函数能执行大量不同的文件操作。和这个函数相比,请优先考虑win32的CreateFile函数(它能打开命名管道和控制Unicode文件名,同时不受128个字符的路径名称的限制)
ReadFile 从文件中读出数据。与lread函数相比,这个函数要明显灵活的多。该函数能够操作通信设备、管道、套接字以及邮槽
ReadFileEx 与ReadFile相似,只是它只能用于异步读操作,并包含了一个完整的回调
SearchPath 查找指定文件
SetEndOfFile 针对一个打开的文件,将当前文件位置设为文件末尾
SetFileAttributes 设置文件属性
SetFilePointer 在一个文件中设置当前的读写位置
SetFileTime 设置文件的创建、访问及上次修改时间
UnlockFile 解除对一个文件的锁定
UnlockFileEx 解除对一个文件的锁定
WriteFile 将数据写入一个文件。该函数比lwrite函数要灵活的多。也可将这个函数应用于对通信设备、管道、套接字以及邮槽的处理
WriteFileEx 与WriteFile类似,只是它只能用于异步写操作,并包括了一个完整的回调

让我们通过几个例子来详细的了解一下其中主要的几个函数及其用法:
1、CreateFile

作用:这是一个全功能的例程,可打开和创建文件、管道、邮槽、通信服务、设备以及控制台

声明形式:

Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, lpSecurityAttributes As SECURITY_ATTRIBUTES, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long

说明:

此函数的返回值类型为Long,如执行成功,则返回文件句柄。INVALID_HANDLE_VALUE表示出错,会设置GetLastError。即使函数成功,但若文件存在,且指定了CREATE_ALWAYS 或 OPEN_ALWAYS,GetLastError也会设为ERROR_ALREADY_EXISTS

打开一个通信端口时(如COM1),无论如何都要设置成 OPEN_EXISTING。



这个函数代替了lOpen 和 lCreate函数,应该是我们的首选

参数说明:

参数 类型及说明
lpFileName String,要打开的文件的名字
dwDesiredAccess Long,如果为 GENERIC_READ 表示允许对设备进行读访问;如果为 GENERIC_WRITE 表示允许对设备进行写访问(可组合使用);如果为零,表示只允许获取与一个设备有关的信息
dwShareMode Long,零表示不共享; FILE_SHARE_READ 和/或 FILE_SHARE_WRITE 表示允许对文件进行共享访问
lpSecurityAttributes SECURITY_ATTRIBUTES,指向一个SECURITY_ATTRIBUTES结构的指针,定义了文件的安全特性(如果操作系统支持的话)
dwCreationDisposition Long,下述常数之一:
CREATE_NEW 创建文件;如文件存在则会出错
CREATE_ALWAYS 创建文件,会改写前一个文件
OPEN_EXISTING 文件必须已经存在。由设备提出要求
OPEN_ALWAYS 如文件不存在则创建它
TRUNCATE_EXISTING 讲现有文件缩短为零长度
dwFlagsAndAttributes Long,一个或多个下述常数
FILE_ATTRIBUTE_ARCHIVE 标记归档属性
FILE_ATTRIBUTE_COMPRESSED 将文件标记为已压缩,或者标记为文件在目录中的默认压缩方式
FILE_ATTRIBUTE_NORMAL 默认属性
FILE_ATTRIBUTE_HIDDEN 隐藏文件或目录
FILE_ATTRIBUTE_READONLY 文件为只读
FILE_ATTRIBUTE_SYSTEM 文件为系统文件
FILE_FLAG_WRITE_THROUGH 操作系统不得推迟对文件的写操作
FILE_FLAG_OVERLAPPED 允许对文件进行重叠操作
FILE_FLAG_NO_BUFFERING 禁止对文件进行缓冲处理。文件只能写入磁盘卷的扇区块
FILE_FLAG_RANDOM_ACCESS 针对随机访问对文件缓冲进行优化
FILE_FLAG_SEQUENTIAL_SCAN 针对连续访问对文件缓冲进行优化
FILE_FLAG_DELETE_ON_CLOSE 关闭了上一次打开的句柄后,将文件删除。特别适合临时文件
也可在Windows NT下组合使用下述常数标记:
SECURITY_ANONYMOUS, SECURITY_IDENTIFICATION, SECURITY_IMPERSONATION, SECURITY_DELEGATION, SECURITY_CONTEXT_TRACKING, SECURITY_EFFECTIVE_ONLY
hTemplateFile Long,如果不为零,则指定一个文件句柄。新文件将从这个文件中复制扩展属性

示例如下:

long hfile= CreateFile(“c:\\test.txt”,GENERIC_READ,

FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,

OPEN_EXISTING,FILE_ELAG_OVERLAPPED,NULL)

2、lcreat

作用:创建一个文件。如文件已经存在,就会将其缩短成零长度,并将其打开,以便读写

声明形式:

Declare Function lcreat Lib "kernel32" Alias "_lcreat" (ByVal lpPathName As String, ByVal iAttribute As Long) As Long

说明:此函数的返回值类型为Long,如执行成功,返回打开文件的句柄。如果出错,则返回HFILE_ERROR

该函数会打开已由其他应用程序打开的文件,所以使用它时要小心。win

32的CreateFile函数已取代了这个函数。这个函数与vb的open语句作用相同

参数说明:

参数 类型及说明
lpPathName String,欲创建的文件的名字
iAttribute Long,下述值之一:
 0——文件能够读写
 1——创建只读文件
 2——创建隐藏文件
 3——创建系统文件

例如下面的语句打开c:\test.txt文件

lcreat “c:\test.txt”,0
 3、lopen

作用:以二进制模式打开指定的文件

声明形式:

Declare Function lopen Lib "kernel32" Alias "_lopen" (ByVal lpPathName As String, ByVal iReadWrite As Long) As Long

说明:此函数的返回值类型为Long,如执行成功,返回打开文件的句柄。HFILE_ERROR表示出错。会设置GetLastError

CreateFile函数在win32下提供了更多的功能:

参数说明:

参数 类型及说明
lpPathName String,欲打开文件的名字
iReadWrite Long,访问模式和共享模式常数的一个组合,如下所示:
1、访问模式
READ 打开文件,读取其中的内容
READ_WRITE 打开文件,对其进行读写
WRITE 打开文件,在其中写入内容
2、共享模式(参考OpenFile函数的标志常数表)
OF_SHARE_COMPAT, OF_SHARE_DENY_NONE, OF_SHARE_DENY_READ, OF_SHARE_DENY_WRITE, OF_SHARE_EXCLUSIVE

4、GetFileTime

作用:取得指定文件的时间信息

声明形式:

Declare Function GetFileTime Lib "kernel32" Alias "GetFileTime" (ByVal hFile As Long, lpCreationTime As FILETIME, lpLastAccessTime As FILETIME, lpLastWriteTime As FILETIME) As Long

说明:Long,非零表示成功,零表示失败。会设置GetLastError

如果不需要特定的信息,那么lpCreationTime,lpLastAccessTime,lpLastWriteTime都可以设置为零(用ByVal As Long)。这个函数返回的文件时间采用UTC格式

参数说明:

参数 类型及说明
hFile Long,文件的句柄
lpCreationTime FILETIME,用于装载文件的创建时间
lpLastAccessTime FILETIME,用于装载文件上一次访问的时间(FAT文件系统不支持这一特性)
lpLastWriteTime FILETIME,用于装载文件上一次修改的时间

示例代码如下:

‘函数声明

Private Declare Function GetFileTime Lib "kernel32" (ByVal hFile As Long, lpCreationTime As FileTime, lpLastAccessTime As FileTime, lpLastWriteTime As FileTime) As Long

Private Declare Function lopen Lib "kernel32" Alias "_lopen" (ByVal lpPathName As String, ByVal iReadWrite As Long) As Long

‘定义变量

Dim file As Long
Dim CreationTime As FileTime
Dim lastaccesstime As FileTime
Dim lastaccesstime As FileTime

‘定义结构

Private Type FileTime
 dwLowDateTime As Long
 dwHighDateTime As Long

End Type

Private Sub Form_Load()
 str1 = "c:\text.txt"
 file = lopen

(str1, READ_WRITE) ‘打开文件
 temp = GetFileTime(file, CreationTime, lastaccesstime, lastwritetime)’得到文件相关信息
 MsgBox CreationTime ‘显示信息

End Sub

以上代码显示文件的创建时间

5、CopyFile

作用:复制文件。与vb的filecopy命令相似

声明形式:

Declare Function CopyFile Lib "kernel32" Alias "CopyFileA" (ByVal lpExistingFileName As String, ByVal lpNewFileName As String, ByVal bFailIfExists As Long) As Long

说明:Long,非零表示成功,零表示失败。会设置GetLastError

参数说明:

参数 类型及说明
lpExistingFileName String,源文件名
lpNewFileName String,目标文件名
bFailIfExists Long,如果设为TRUE(非零),那么一旦目标文件已经存在,则函数调用会失败。否则目标文件被改写

示例代码如下:

‘函数声明

Private Declare Function CopyFile Lib "kernel32" Alias "CopyFileA" (ByVal lpExistingFileName As String, ByVal lpNewFileName As String, ByVal bFailIfExists As Long) As Long

Private Sub Form_Load()

 CopyFile "c:\test1.txt", "c:\test2.txt", 1

End Sub

以上代码将c:\test1.txt 拷贝到c:\test2.txt

6、MoveFile, MoveFileEx

作用:移动文件。如dwFlags设为零,则MoveFile完全等价于MoveFileEx

声明形式:

Declare Function MoveFile& Lib "kernel32" Alias "MoveFileA" (ByVal lpExistingFileName As String, ByVal lpNewFileName As String)

Declare Function MoveFileEx& Lib "kernel32" Alias "MoveFileExA" (ByVal lpExistingFileName As String, ByVal lpNewFileName As String, ByVal dwFlags As Long)

说明:Long,非零表示成功,零表示失败。会设置GetLastError

这两个函数通常不能将文件从一个卷移动到另一个卷。但如设置了MOVEFILE_COPY_ALLOWED标记,MoveFileEx可以做到这一点.

参数说明:

参数 类型及说明
lpExistingFileName String,欲移动的文件名
lpNewFileName String,新文件名
dwFlags Long,一个或多个下述常数
MOVEFILE_REPLACE_EXISTING 如目标文件存在,则将其替换
MOVEFILE_COPY_ALLOWED 如移动到一个不同的卷,则复制文件并删除原来的文件
MOVEFILE_DELAY_UNTIL_REBOOT 移动操作在系统下次重新启动时正式进行。这样便可在Windows NT中改换系统文件

示例代码如下:

‘定义结构

Private Const MOVEFILE_COPY_ALLOWED = &H2
Private Const MOVEFILE_DELAY_UNTIL_REBOOT = &H4
Private Const MOVEFILE_REPLACE_EXISTING = &H1

‘函数声明

Private Declare Function MoveFile& Lib "kernel32" Alias "MoveFileA" (ByVal lpExistingFileName As String, ByVal lpNewFileName As String)

Private Declare Function MoveFileEx& Lib "kernel32" Alias "MoveFileExA" (ByVal lpExistingFileName As String, ByVal lpNewFileName As String, ByVal dwFlags As Long)

Private Sub For

m_Load()
 MoveFile "c:\test.txt", "d:\test1.txt" ‘移动文件
 MoveFileEx "d:\test1.txt", "c:\test.txt", MOVEFILE_REPLACE_EXISTING ‘再一次移动
End Sub

以上代码实现了文件的移动,两次移动後,文件不变

7、DeleteFile

作用:删除指定文件

声明形式:

Declare Function DeleteFile Lib "kernel32" Alias "DeleteFileA" (ByVal lpFileName As String) As Long

说明:Long,非零表示成功,零表示失败。会设置GetLastError

与vb的kill语句相似,在windows 95下使用这个函数要小心——即使文件当前正由一个应用程序打开,该函数也会将其删除.

参数说明:

参数 类型及说明
lpFileName String,欲删除文件的名字

示例代码如下:

‘函数声明

Private Declare Function DeleteFile Lib "kernel32" Alias "DeleteFileA" (ByVal lpFileName As String) As Long

Private Sub Form_Load()

 DeleteFile "c:\test.txt"

End Sub

以上代码删除了c:\test.txt文件

写了这没多,真的很累了,所以更希望自己的辛苦没有白费,VB虽然是一个RAD类的工具,并让很多人不屑使用,但实事求是得说,VB的功能的确强大,尤其是人性化的设计,让人爱不释手,希望对喜爱VB的爱好者能够对vb能产生一个新的认识,而不仅仅停留在对其提供的现有控件的使用。




相关文档