温江社保局地址:Excel-VBA操大方法之四(2)
来源:百度文库 编辑:偶看新闻 时间:2024/04/30 07:34:44
下面是windows中提供的对于文件进行操作的API函数及其功能:
CloseHandle
CompareFileTime
CopyFile
CreateFile
DeleteFile
FindClose
FindFirstFile
FindNextFile
FlushFileBuffers
GetBinaryType
GetFileAttributes
GetFileInformationByHand
GetFileSize
GetFileTime
GetFileType
GetFileVersionInfo
GetFileVersionInfoSize
GetFullPathName
GetShortPathName
GetTempFileName
GetTempPath
lclose
lcreat
llseek
LockFile
LockFileEx
lopen
lread
lwrite
MoveFile, MoveFileEx
OpenFile
ReadFile
ReadFileEx
SearchPath
SetEndOfFile
SetFileAttributes
SetFilePointer
SetFileTime
UnlockFile
UnlockFileEx
WriteFile
WriteFileEx
文件的压缩和解压缩
LZOpenFile
LZSeek
LZRead
LZClose
LZCopy
GetExpandedName
下面通过几个例子来详细的了解一下其中主要的几个函数及其用法:
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
·dwDesiredAccess
·dwShareMode
·lpSecurityAttributes
·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
示例如下:
lngHandle = CreateFile("c:\text.txt", GENERIC_WRITE, FILE_SHARE_READ Or FILE_SHARE_WRITE, ByVal 0&, OPEN_ALWAYS, 0, 0)
'上面代码以写方法打开文件,如文件不存在则创建它。
2、lcreat
作用:创建一个文件。如文件已经存在,就会将其缩短成零长度,并将其打开,以便读写
声明:Declare Function lcreat Lib "kernel32" Alias "_lcreat" (ByVal lpPathName As String, ByVal iAttribute As Long) As Long
说明:此函数的返回值类型为Long,如执行成功,返回打开文件的句柄。如果出错,则返回HFILE_ERROR
该函数会打开已由其他应用程序打开的文件,所以使用它时要小心。win32的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
参数说明:
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
示例:
lopen “c:\test.txt”,READ
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
lpLastAccessTime
lpLastWriteTime
示例:
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
str1 = "c:\text.txt"
file = lopen(str1, READ_WRITE) ‘打开文件
temp = GetFileTime(file, CreationTime, lastaccesstime, lastwritetime)’得到文件相关信息
以上代码获取的时间信息是Long型的,还需要时间转换函数进行转换,完整的示例见附件。
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
lpNewFileName
bFailIfExists
示例:
CopyFile "c:\test1.txt", "c:\test2.txt", 1
以上代码将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
lpNewFileName
dwFlags
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
MoveFile "c:\test.txt", "d:\test1.txt" ‘移动文件
MoveFileEx "d:\test1.txt", "c:\test.txt", MOVEFILE_COPY_ALLOWED ‘再一次移动
以上代码实现了文件的移动,两次移动後,文件不变
7、DeleteFile
作用:删除指定文件
声明:Declare Function DeleteFile Lib "kernel32" Alias "DeleteFileA" (ByVal lpFileName As String) As Long
说明:Long,非零表示成功,零表示失败。会设置GetLastError
与vba的kill语句相似,在windows 95下使用这个函数要小心——即使文件当前正由一个应用程序打开,该函数也会将其删除.
参数说明:
lpFileName String,欲删除文件的名字
示例:
DeleteFile "c:\test.txt"
完整的示例见附件。
8、ReadFile
作用:从文件中读出数据。与lread函数相比,这个函数要明显灵活的多。该函数能够操作通信设备、管道、套接字以及邮槽
声明:Private Declare Function ReadFile Lib "kernel32" Alias "ReadFile" (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToRead As Long, lpNumberOfBytesRead As Long, lpOverlapped As OVERLAPPED) As Long
说明:Long,非零表示成功,零表示失败。会设置GetLastError。如启动的是一次异步读操作,则函数会返回零值,并将ERROR_IO_PENDING设置成GetLastError的结果。如结果不是零值,但读入的字节数小于nNumberOfBytesToRead参数指定的值,表明早已抵达了文件的结尾
参数:
hFile ---- Long,文件的句柄
lpBuffer ---
nNumberOfBytesToRead -
lpNumberOfBytesRead -
lpOverlapped ---
示例:完整的示例见附件。
9、WriteFile
作用:将数据写入一个文件。该函数比lwrite函数要灵活的多。也可将这个函数应用于对通信设备、管道、套接字以及邮槽的处理
声明:Declare Function WriteFile Lib "kernel32" Alias "WriteFile" (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToWrite As Long, lpNumberOfBytesWritten As Long, lpOverlapped As OVERLAPPED) As Long
说明:Long,TRUE(非零)表示成功,否则返回零。会设置GetLastError
参数:
hFile ---
lpBuffer --- Any,要写入的一个数据缓冲区
nNumberOfBytesToWrite -
lpNumberOfBytesWritten -
lpOverlapped ---
示例:完整的示例见附件。
10、SHFileOperation
作用:此函数的功能很强大,能对文件或文件夹进行复制、移动、重命名、删除的全部操作。
声明:Declare Function SHFileOperation Lib "shell32.dll" Alias "SHFileOperationA" (lpFileOp As SHFILEOPSTRUCT) As Long
说明:Long,TRUE(非零)表示成功,否则返回零。
参数:
lpFileOp --SHFILEOPSTRUCT类型,指定文件的操作。
Type SHFILEOPSTRUCT
End Type
示例:见附件。
(三)总结
通过以上的介绍,我们可以看到API在文件操作方面功能十分强大,能够完成一些前面方法所不能完成的任务。FileSystemObject对象模型的内部可能就是用API写的,即便不是我们也可以用API写出一个FSO类来。API是一个巨大的宝库,当你为实现某个功能而愁眉不展的时候,查查API可能就能找到满意的答案。
写的这么多,希望对大家有所帮助,至少操作文件是没有什么问题了。 原文链接:http://blog.sina.com.cn/s/blog_499676d8010008z9.html~type=v5_one&label=rela_nextarticle