VB中操作目錄的WinodwsAPI小結
下面是windows中提供的對于目錄進行操作的API函數及其功能:
讓我們通過幾個例子來詳細的了解一下其中主要的幾個函數及其用法:
1、GetLogicalDrives
作用:判斷系統中存在哪些邏輯驅動器字母
聲明形式:Declare Function GetLogicalDrives Lib "kernel32" Alias "GetLogicalDrives" () As Long
說明:此函數的返回值類型為Long,這個結構中的二進制位標志著存在哪些驅動器。其中,位0設為1表示驅動器A:存在于系統中;位1設為1表示存在B:驅動器;以次類推
2、GetDriveType
作用:判斷一個磁盤驅動器的類型
聲明形式:Declare Function GetDriveType Lib "kernel32" Alias "GetDriveTypeA" (ByVal nDrive As String) As Long
說明:此函數的返回值類型為Long,如驅動器不能識別,則返回零。如指定的目錄不存在,則返回1。如執行成功,則用下述任何一個常數指定驅動器類型:DRIVE_REMOVABLE(表示磁盤可以從驅動器上移走,通常是軟驅), DRIVE_FIXED(磁盤不能從驅動器上移走,通常為本地硬盤), DRIVE_REMOTE(驅動器是遠程網絡驅動器), DRIVE_CDROM(驅動器是CD-ROM驅動器) 或 DRIVE_RAMDISK(驅動器是RAM驅動器)
參數為String類型,包含了驅動器根目錄路徑的一個字串
下面是示例代碼:
以上代碼可以判斷e:的類型。
3、GetDiskFreeSpaceEx
作用:獲取與一個磁盤的組織以及剩余空間容量有關的信息
聲明形式:
說明:此函數的返回值類型為Long,非零表示成功,零表示失敗。會設置GetLastError.
在采用FAT16格式的windows95系統中,如一個驅動器(分區)的容量超過了2GB,則不應使用這個函數。此時,這個函數能識別的最大分區容量只有2GB
參數說明:
LARGE_INTEGER結構用來代表一個64位帶符號的整數值,它的定義如下:
其中lowpart為 Long,指定低32位
highpart 為 Long,指定高32位
LARGE_INTEGER結構與FILETIME結構內部完全一致。
請看下面示例:
以上代碼顯示了c:上的容量,可用空間和已用空間。
4、CreateDirectory, CreateDirectoryEx
作用:創建一個新目錄
聲明形式:
說明:此函數的返回值類型為Long,非零表示成功,零表示失敗。會設置GetLastError
參數說明:
示例程序代碼如下:
以上代碼在c:下創建一個名為test的文件夾
5、RemoveDirectory
作用:移除一個目錄
聲明形式:
說明:此函數的返回值類型為Long,非零表示成功,零表示失敗。會設置GetLastError.
在調用這個函數前,目錄必須為空
參數說明:
示例代碼如下:
以上代碼刪除c:下一個名為test的文件夾。
6、SetCurrentDirectory
作用:設置當前目錄
聲明形式:
說明:此函數的返回值類型為Long,非零表示成功,零表示失敗。會設置GetLastError
參數說明:
示例代碼如下:
以上代碼將c:設置為當前目錄
7、GetSystemDirectory
作用:這個函數能取得Windows系統目錄(System目錄)的完整路徑名。在這個目錄中,包含了所有必要的系統文件。根據微軟的標準,其他定制控件和一些共享組件也可放到這個目錄。通常應避免在這個目錄里創建文件。在網絡環境中,往往需要管理員權限才可對這個目錄進行寫操作
聲明形式:
說明:此函數的返回值類型為Long,裝載到lpBuffer緩沖區的字符數量。如lpBuffer不夠大,不能容下文件名,則返回要求的緩沖區長度
參數說明:
示例代碼如下:
以上代碼獲取了windows系統目錄的完
| CreateDirectory, CreateDirectoryEx | 創建一個新目錄 |
| GetCurrentDirectory | 在一個緩沖區中裝載當前目錄 |
| GetDiskFreeSpace,GetDiskFreeSpaceEx | 獲取與一個磁盤的組織有關的信息,以及了解剩余空間的容量 |
| GetDriveType | 判斷一個磁盤驅動器的類型 |
| GetFullPathName | 獲取指定文件的完整路徑名 |
| GetLogicalDrives | 判斷系統中存在哪些邏輯驅動器字母 |
| GetLogicalDriveStrings | 獲取一個字串,其中包含了當前所有邏輯驅動器的根驅動器路徑 |
| GetSystemDirectory | 這個函數能取得Windows系統目錄(System目錄)的完整路徑名。在這個目錄中,包含了所有必要的系統文件。根據微軟的標準,其他定制控件和一些共享組件也可放到這個目錄。通常應避免在這個目錄里創建文件。在網絡環境中,往往需要管理員權限才可對這個目錄進行寫操作 |
| GetTempPath | 獲取為臨時文件指定的路徑 |
| GetVolumeInformation | 獲取與一個磁盤卷有關的信息 |
| GetWindowsDirectory | 這個函數能獲取Windows目錄的完整路徑名。在這個目錄里,保存了大多數windows應用程序文件及初始化文件 |
| RemoveDirectory | 刪除指定目錄 |
| SetCurrentDirectory | 設置當前目錄 |
| SetVolumeLabel | 設置一個磁盤的卷標(Label) |
讓我們通過幾個例子來詳細的了解一下其中主要的幾個函數及其用法:
1、GetLogicalDrives
作用:判斷系統中存在哪些邏輯驅動器字母
聲明形式:Declare Function GetLogicalDrives Lib "kernel32" Alias "GetLogicalDrives" () As Long
說明:此函數的返回值類型為Long,這個結構中的二進制位標志著存在哪些驅動器。其中,位0設為1表示驅動器A:存在于系統中;位1設為1表示存在B:驅動器;以次類推
2、GetDriveType
作用:判斷一個磁盤驅動器的類型
聲明形式:Declare Function GetDriveType Lib "kernel32" Alias "GetDriveTypeA" (ByVal nDrive As String) As Long
說明:此函數的返回值類型為Long,如驅動器不能識別,則返回零。如指定的目錄不存在,則返回1。如執行成功,則用下述任何一個常數指定驅動器類型:DRIVE_REMOVABLE(表示磁盤可以從驅動器上移走,通常是軟驅), DRIVE_FIXED(磁盤不能從驅動器上移走,通常為本地硬盤), DRIVE_REMOTE(驅動器是遠程網絡驅動器), DRIVE_CDROM(驅動器是CD-ROM驅動器) 或 DRIVE_RAMDISK(驅動器是RAM驅動器)
參數為String類型,包含了驅動器根目錄路徑的一個字串
下面是示例代碼:
| ‘定義常數變量 Private Const DRIVE_CDROM = 5 ‘表示光盤驅動器 Private Const DRIVE_FIXED = 3 ‘表示硬盤驅動器 Private Const DRIVE_RAMDISK = 6 ‘表示RAM驅動器 Private Const DRIVE_REMOTE = 4 ‘表示網絡驅動器 Private Const DRIVE_REMOVABLE = 2 ‘表示軟盤驅動器 ‘函數聲明 Private Declare Function GetDriveType Lib "kernel32" Alias "GetDriveTypeA" (ByVal nDrive As String) As Long Private Sub Form_Load() Dim temp As Long temp = GetDriveType("e:") ‘取的e:盤驅動器類型 Select Case temp ‘比較 Case DRIVE_CDROM MsgBox "DRIVE_CDROM: 光盤驅動器" Case DRIVE_FIXED MsgBox "DRIVE_FIXED: 硬盤驅動器" Case DRIVE_RAMDISK MsgBox "DRIVE_RAMDISK: RAM驅動器" Case DRIVE_REMOTE MsgBox "DRIVE_REMOTE: 網絡驅動器" Case DRIVE_REMOVABLE MsgBox "DRIVE_REMOVABLE: 軟盤驅動器" End Select End Sub |
以上代碼可以判斷e:的類型。
3、GetDiskFreeSpaceEx
作用:獲取與一個磁盤的組織以及剩余空間容量有關的信息
聲明形式:
| Declare Function GetDiskFreeSpaceEx Lib "kernel32" Alias "GetDiskFreeSpaceExA" (ByVal lpRootPathName As String, lpFreeBytesAvailableToCaller As LARGE_INTEGER, lpTotalNumberOfBytes As LARGE_INTEGER, lpTotalNumberOfFreeBytes As LARGE_INTEGER) As Long |
說明:此函數的返回值類型為Long,非零表示成功,零表示失敗。會設置GetLastError.
在采用FAT16格式的windows95系統中,如一個驅動器(分區)的容量超過了2GB,則不應使用這個函數。此時,這個函數能識別的最大分區容量只有2GB
參數說明:
| 參數 | 類型及說明 |
| lpRootPathName | String,不包括卷名的磁盤根路徑名 |
| lpFreeBytesAvailableToCaller | LARGE_INTEGER,指定一個變量,用于容納調用者可用的字節數量 |
| lpTotalNumberOfBytes | LARGE_INTEGER,指定一個變量,用于容納磁盤上的總字節數 |
| lpTotalNumberOfFreeBytes | LARGE_INTEGER,指定一個變量,用于容納磁盤上可用的字節數 |
LARGE_INTEGER結構用來代表一個64位帶符號的整數值,它的定義如下:
| Type LARGE_INTEGER ' 8 Bytes lowpart As Long highpart As Long End Type |
其中lowpart為 Long,指定低32位
highpart 為 Long,指定高32位
LARGE_INTEGER結構與FILETIME結構內部完全一致。
請看下面示例:
| Private Type LARGE_INTEGER ' 8 Bytes,定義一個LARGE_INTEGER結構 lowpart As Long highpart As Long End Type ‘函數聲明 Private Declare Function GetDiskFreeSpaceEx Lib "kernel32" Alias "GetDiskFreeSpaceExA" (ByVal lpRootPathName As String, lpFreeBytesAvailableToCaller As LARGE_INTEGER, lpTotalNumberOfBytes As LARGE_INTEGER, lpTotalNumberOfFreeBytes As LARGE_INTEGER) As Long ‘定義變量 Dim RootPathName As String Dim FreeBytesAvailabletoCaller As LARGE_INTEGER Dim TotalNumberOfBytes As LARGE_INTEGER Dim TotalNumberOfFreeBytes As LARGE_INTEGER Private Sub Form_Load() Dim temp As Long Dim tempa, tempb, tempc RootPathName = "c:" ‘取得磁盤空間 temp = GetDiskFreeSpaceEx(RootPathName, FreeBytesAvailabletoCaller, TotalNumberOfBytes, TotalNumberOfFreeBytes) ‘格式化文本,并顯示在text控件 Text1.Text = Text1.Text + "磁盤容量:" + Chr(13) + Chr(10) tempa = TotalNumberOfBytes.highpart * 65635 + TotalNumberOfBytes.lowpart ‘計算容量 tempa = 0 – tempa ‘我的驅動器大于2G,要得到正確的值,進行了調整 Text1.Text = Text1.Text + CStr(tempa) + "字節" + Chr(13) + Chr(10) tempa = Format(tempa / 1024 / 1024 / 1024, "0.00") Text1.Text = Text1.Text + tempa + "G" + Chr(13) + Chr(10) ‘取得磁盤可用空間 Text1.Text = Text1.Text + "磁盤可用空間:" + Chr(13) + Chr(10) tempb = TotalNumberOfFreeBytes.highpart * 1000 + TotalNumberOfFreeBytes.lowpart ‘計算 Text1.Text = Text1.Text + CStr(tempb) + "字節" + Chr(13) + Chr(10) ’格式化文本并顯示 tempb = Format(tempb / 1024 / 1024 / 1024, "0.00") Text1.Text = Text1.Text + tempb + "G" + Chr(13) + Chr(10) ‘取得磁盤已用空間 Text1.Text = Text1.Text + "磁盤已用空間:" + Chr(13) + Chr(10) tempa = 0 – tempa ‘調整 tempc = tempa – tempb ‘計算 tempc = 0 - tempc Text1.Text = Text1.Text + CStr(tempc) + "G" + Chr(13) + Chr(10)’格式化文本,并顯示 End Sub |
以上代碼顯示了c:上的容量,可用空間和已用空間。
4、CreateDirectory, CreateDirectoryEx
作用:創建一個新目錄
聲明形式:
| Declare Function CreateDirectory& Lib "kernel32" Alias "CreateDirectoryA" (ByVal lpNewDirectory As String, lpSecurityAttributes As SECURITY_ATTRIBUTES) Declare Function CreateDirectoryEx& Lib "kernel32" Alias "CreateDirectoryExA" (ByVal lpTemplateDirectory As String, ByVal lpNewDirectory As String, lpSecurityAttributes As SECURITY_ATTRIBUTES) |
說明:此函數的返回值類型為Long,非零表示成功,零表示失敗。會設置GetLastError
參數說明:
| 參數 | 類型及說明 |
| lpTemplateDirectory | String,指定一個模板目錄的名字,從中復制默認屬性(比如目錄中文件的默認壓縮方式)。如設為vbNullString,則表示不使用模板 |
| lpNewDirectory | String,新目錄的名字 |
| lpSecurityAttributes | SECURITY_ATTRIBUTES,這個結構定義了目錄的安全特性——如果操作系統支持的話 |
示例程序代碼如下:
| ‘定義結構 Private Type SECURITY_ATTRIBUTES nLength As Long lpSecurityDescriptor As Long bInheritHandle As Long End Type ‘函數聲明 Private Declare Function CreateDirectory& Lib "kernel32" Alias "CreateDirectoryA" (ByVal lpNewDirectory As String, lpSecurityAttributes As SECURITY_ATTRIBUTES) Private Declare Function CreateDirectoryEx& Lib "kernel32" Alias "CreateDirectoryExA" (ByVal lpTemplateDirectory As String, ByVal lpNewDirectory As String, lpSecurityAttributes As SECURITY_ATTRIBUTES) Private Sub form_load() Dim temp As SECURITY_ATTRIBUTES CreateDirectory "c:est", temp ‘創建文件夾 End Sub |
以上代碼在c:下創建一個名為test的文件夾
5、RemoveDirectory
作用:移除一個目錄
聲明形式:
| Declare Function RemoveDirectory Lib "kernel32" Alias "RemoveDirectoryA" (ByVal lpPathName As String) As Long |
說明:此函數的返回值類型為Long,非零表示成功,零表示失敗。會設置GetLastError.
在調用這個函數前,目錄必須為空
參數說明:
| 參數 | 類型及說明 |
| lpPathName | 為String類型,要刪除的那個目錄的名字 |
示例代碼如下:
| ‘函數聲明 Private Declare Function RemoveDirectory Lib "kernel32" Alias "RemoveDirectoryA" (ByVal lpPathName As String) As Long Private Sub form_load() Dim temp As String temp= “c:est” RemoveDirectory temp ‘移除文件夾 End Sub |
以上代碼刪除c:下一個名為test的文件夾。
6、SetCurrentDirectory
作用:設置當前目錄
聲明形式:
| Declare Function SetCurrentDirectory Lib "kernel32" Alias "SetCurrentDirectoryA" (ByVal lpPathName As String) As Long |
說明:此函數的返回值類型為Long,非零表示成功,零表示失敗。會設置GetLastError
參數說明:
| 參數 | 類型及說明 |
| LpPathName | String,新當前目錄的路徑 |
示例代碼如下:
| ‘函數聲明 Private Declare Function SetCurrentDirectory Lib "kernel32" Alias "SetCurrentDirectoryA" (ByVal lpPathName As String) As Long Private Sub form_load() SetCurrentDirectory "c:" ‘設置當前目錄 End Sub |
以上代碼將c:設置為當前目錄
7、GetSystemDirectory
作用:這個函數能取得Windows系統目錄(System目錄)的完整路徑名。在這個目錄中,包含了所有必要的系統文件。根據微軟的標準,其他定制控件和一些共享組件也可放到這個目錄。通常應避免在這個目錄里創建文件。在網絡環境中,往往需要管理員權限才可對這個目錄進行寫操作
聲明形式:
| Declare Function GetSystemDirectory Lib "kernel32" Alias "GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long |
說明:此函數的返回值類型為Long,裝載到lpBuffer緩沖區的字符數量。如lpBuffer不夠大,不能容下文件名,則返回要求的緩沖區長度
參數說明:
| 參數 | 類型及說明 |
| lpBuffer | String,用于裝載系統目錄路徑名的一個字串緩沖區。它應事先初始化成nSize+1個字符的長度。通常至少要為這個緩沖區分配MAX_PATH個字符的長度 |
| nSize | Long,lpBuffer字串的最大長度 |
示例代碼如下:
| ‘函數聲明 Private Declare Function GetSystemDirectory Lib "kernel32" Alias "GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long Private Sub form_load() Dim buffer As String Dim size As Long size = 255 buffer = size + 1 GetSystemDirectory buffer, size ‘將系統路徑存放在buffer中 MsgBox buffer ‘顯示路徑 End Sub |
以上代碼獲取了windows系統目錄的完