top
Loading...
VB中操作目錄的WinodwsAPI小結
下面是windows中提供的對于目錄進行操作的API函數及其功能:

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

參數說明:

參數類型及說明
lpRootPathNameString,不包括卷名的磁盤根路徑名
lpFreeBytesAvailableToCallerLARGE_INTEGER,指定一個變量,用于容納調用者可用的字節數量
lpTotalNumberOfBytesLARGE_INTEGER,指定一個變量,用于容納磁盤上的總字節數
lpTotalNumberOfFreeBytesLARGE_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

參數說明:

參數類型及說明
lpTemplateDirectoryString,指定一個模板目錄的名字,從中復制默認屬性(比如目錄中文件的默認壓縮方式)。如設為vbNullString,則表示不使用模板
lpNewDirectoryString,新目錄的名字
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

參數說明:

參數類型及說明
LpPathNameString,新當前目錄的路徑

示例代碼如下:

‘函數聲明

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不夠大,不能容下文件名,則返回要求的緩沖區長度

參數說明:

參數類型及說明
lpBufferString,用于裝載系統目錄路徑名的一個字串緩沖區。它應事先初始化成nSize+1個字符的長度。通常至少要為這個緩沖區分配MAX_PATH個字符的長度
nSizeLong,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系統目錄的完
作者:http://www.zhujiangroad.com
來源:http://www.zhujiangroad.com
北斗有巢氏 有巢氏北斗