Windows檔案操作API

來源:互聯網
上載者:User

下面是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  
  該函數會開啟已由其他應用程式開啟的檔案,所以使用它時要小心。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  
  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)   AsLong  
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   Form_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   lpFileNameAs   String)   As   Long  
Private   Sub   Form_Load()  
DeleteFile   "c:/test.txt"  
End   Sub    
以上代碼刪除了c:/test.txt檔案  
  VB雖然是一個RAD類的工具,並讓很多人不屑使用,但實事求是得說,VB的功能的確強大,尤其是人性化的設計。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.