下面是windows中提供的對(duì)于文件進(jìn)行操作的API函數(shù)及其功能:
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
下面通過幾個(gè)例子來詳細(xì)的了解一下其中主要的幾個(gè)函數(shù)及其用法:
1、CreateFile
作用:這是一個(gè)全功能的例程,可打開和創(chuàng)建文件、管道、郵槽、通信服務(wù)、設(shè)備以及控制臺(tái)
聲明:
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
說明:
此函數(shù)的返回值類型為Long,如執(zhí)行成功,則返回文件句柄。INVALID_HANDLE_VALUE表示出錯(cuò),會(huì)設(shè)置GetLastError。即使函數(shù)成功,但若文件存在,且指定了CREATE_ALWAYS 或 OPEN_ALWAYS,GetLastError也會(huì)設(shè)為ERROR_ALREADY_EXISTS
打開一個(gè)通信端口時(shí)(如COM1),無論如何都要設(shè)置成 OPEN_EXISTING。
這個(gè)函數(shù)代替了lOpen 和 lCreate函數(shù),應(yīng)該是我們的首選
參數(shù)說明:
·lpFileName
·dwDesiredAccess
·dwShareMode
·lpSecurityAttributes
·dwCreationDisposition
Long,下述常數(shù)之一:
CREATE_NEW
CREATE_ALWAYS
OPEN_EXISTING
OPEN_ALWAYS
TRUNCATE_EXISTING
·dwFlagsAndAttributes
Long,一個(gè)或多個(gè)下述常數(shù)
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下組合使用下述常數(shù)標(biāo)記:
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)
'上面代碼以寫方法打開文件,如文件不存在則創(chuàng)建它。
2、lcreat
作用:創(chuàng)建一個(gè)文件。如文件已經(jīng)存在,就會(huì)將其縮短成零長度,并將其打開,以便讀寫
聲明:Declare Function lcreat Lib "kernel32" Alias "_lcreat" (ByVal lpPathName As String, ByVal iAttribute As Long) As Long
說明:此函數(shù)的返回值類型為Long,如執(zhí)行成功,返回打開文件的句柄。如果出錯(cuò),則返回HFILE_ERROR
該函數(shù)會(huì)打開已由其他應(yīng)用程序打開的文件,所以使用它時(shí)要小心。win32的CreateFile函數(shù)已取代了這個(gè)函數(shù)。這個(gè)函數(shù)與vb的open語句作用相同
參數(shù)說明:
lpPathName String,欲創(chuàng)建的文件的名字
iAttribute Long,下述值之一:
0——文件能夠讀寫
1——?jiǎng)?chuàng)建只讀文件
2——?jiǎng)?chuàng)建隱藏文件
3——?jiǎng)?chuàng)建系統(tǒng)文件
示例:
下面的語句打開c:\test.txt文件
lcreat “c:\test.txt”,0
3、lopen
作用:以二進(jìn)制模式打開指定的文件
聲明:Declare Function lopen Lib "kernel32" Alias "_lopen" (ByVal lpPathName As String, ByVal iReadWrite As Long) As Long
說明:此函數(shù)的返回值類型為Long,如執(zhí)行成功,返回打開文件的句柄。HFILE_ERROR表示出錯(cuò)。會(huì)設(shè)置GetLastError
參數(shù)說明:
lpPathName String,欲打開文件的名字
iReadWrite Long,訪問模式和共享模式常數(shù)的一個(gè)組合,如下所示:
1、訪問模式
READ
READ_WRITE
WRITE
2、共享模式(參考OpenFile函數(shù)的標(biāo)志常數(shù)表)
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
作用:取得指定文件的時(shí)間信息
聲明:Declare Function GetFileTime Lib "kernel32" Alias "GetFileTime" (ByVal hFile As Long, lpCreationTime As FILETIME, lpLastAccessTime As FILETIME, lpLastWriteTime As FILETIME) As Long
說明:Long,非零表示成功,零表示失敗。會(huì)設(shè)置GetLastError
如果不需要特定的信息,那么lpCreationTime,lpLastAccessTime,lpLastWriteTime都可以設(shè)置為零(用ByVal As Long)。這個(gè)函數(shù)返回的文件時(shí)間采用UTC格式
參數(shù)說明:
hFile Long,文件的句柄
lpCreationTime
lpLastAccessTime
lpLastWriteTime
示例:
Dim file As Long
Dim CreationTime As FileTime
Dim lastaccesstime As FileTime
Dim lastaccesstime As FileTime
'定義結(jié)構(gòu)
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)’得到文件相關(guān)信息
以上代碼獲取的時(shí)間信息是Long型的,還需要時(shí)間轉(zhuǎn)換函數(shù)進(jìn)行轉(zhuǎn)換,完整的示例見附件。
5、CopyFile
作用:復(fù)制文件。與vb的filecopy命令相似
聲明:Declare Function CopyFile Lib "kernel32" Alias "CopyFileA" (ByVal lpExistingFileName As String, ByVal lpNewFileName As String, ByVal bFailIfExists As Long) As Long
說明:Long,非零表示成功,零表示失敗。會(huì)設(shè)置GetLastError
參數(shù)說明:
lpExistingFileName
lpNewFileName
bFailIfExists
示例:
CopyFile "c:\test1.txt", "c:\test2.txt", 1
以上代碼將c:\test1.txt 拷貝到c:\test2.txt,完整的示例見附件。
6、MoveFile, MoveFileEx
作用:移動(dòng)文件。如dwFlags設(shè)為零,則MoveFile完全等價(jià)于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,非零表示成功,零表示失敗。會(huì)設(shè)置GetLastError
這兩個(gè)函數(shù)通常不能將文件從一個(gè)卷移動(dòng)到另一個(gè)卷。但如設(shè)置了MOVEFILE_COPY_ALLOWED標(biāo)記,MoveFileEx可以做到這一點(diǎn).
參數(shù)說明:
lpExistingFileName
lpNewFileName
dwFlags
MOVEFILE_REPLACE_EXISTING 如目標(biāo)文件存在,則將其替換
MOVEFILE_COPY_ALLOWED
MOVEFILE_DELAY_UNTIL_REBOOT 移動(dòng)操作在系統(tǒng)下次重新啟動(dòng)時(shí)正式進(jìn)行。這樣便可在Windows NT中改換系統(tǒng)文件
示例:
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" ‘移動(dòng)文件
MoveFileEx "d:\test1.txt", "c:\test.txt", MOVEFILE_COPY_ALLOWED ‘再一次移動(dòng)
以上代碼實(shí)現(xiàn)了文件的移動(dòng),兩次移動(dòng)後,文件不變
7、DeleteFile
作用:刪除指定文件
聲明:Declare Function DeleteFile Lib "kernel32" Alias "DeleteFileA" (ByVal lpFileName As String) As Long
說明:Long,非零表示成功,零表示失敗。會(huì)設(shè)置GetLastError
與vba的kill語句相似,在windows 95下使用這個(gè)函數(shù)要小心——即使文件當(dāng)前正由一個(gè)應(yīng)用程序打開,該函數(shù)也會(huì)將其刪除.
參數(shù)說明:
lpFileName String,欲刪除文件的名字
示例:
DeleteFile "c:\test.txt"
完整的示例見附件。
8、ReadFile
作用:從文件中讀出數(shù)據(jù)。與lread函數(shù)相比,這個(gè)函數(shù)要明顯靈活的多。該函數(shù)能夠操作通信設(shè)備、管道、套接字以及郵槽
聲明: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,非零表示成功,零表示失敗。會(huì)設(shè)置GetLastError。如啟動(dòng)的是一次異步讀操作,則函數(shù)會(huì)返回零值,并將ERROR_IO_PENDING設(shè)置成GetLastError的結(jié)果。如結(jié)果不是零值,但讀入的字節(jié)數(shù)小于nNumberOfBytesToRead參數(shù)指定的值,表明早已抵達(dá)了文件的結(jié)尾
參數(shù):
hFile ---- Long,文件的句柄
lpBuffer ---
nNumberOfBytesToRead -
lpNumberOfBytesRead -
lpOverlapped ---
示例:完整的示例見附件。
9、WriteFile
作用:將數(shù)據(jù)寫入一個(gè)文件。該函數(shù)比lwrite函數(shù)要靈活的多。也可將這個(gè)函數(shù)應(yīng)用于對(duì)通信設(shè)備、管道、套接字以及郵槽的處理
聲明: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(非零)表示成功,否則返回零。會(huì)設(shè)置GetLastError
參數(shù):
hFile ---
lpBuffer --- Any,要寫入的一個(gè)數(shù)據(jù)緩沖區(qū)
nNumberOfBytesToWrite -
lpNumberOfBytesWritten -
lpOverlapped ---
示例:完整的示例見附件。
10、SHFileOperation
作用:此函數(shù)的功能很強(qiáng)大,能對(duì)文件或文件夾進(jìn)行復(fù)制、移動(dòng)、重命名、刪除的全部操作。
聲明:Declare Function SHFileOperation Lib "shell32.dll" Alias "SHFileOperationA" (lpFileOp As SHFILEOPSTRUCT) As Long
說明:Long,TRUE(非零)表示成功,否則返回零。
參數(shù):
lpFileOp --SHFILEOPSTRUCT類型,指定文件的操作。
Type SHFILEOPSTRUCT
End Type
示例:見附件。
(三)總結(jié)
通過以上的介紹,我們可以看到API在文件操作方面功能十分強(qiáng)大,能夠完成一些前面方法所不能完成的任務(wù)。FileSystemObject對(duì)象模型的內(nèi)部可能就是用API寫的,即便不是我們也可以用API寫出一個(gè)FSO類來。API是一個(gè)巨大的寶庫,當(dāng)你為實(shí)現(xiàn)某個(gè)功能而愁眉不展的時(shí)候,查查API可能就能找到滿意的答案。
聯(lián)系客服