VB中獲取邏輯磁盤的信息
我們在編程的時候有時會需要得到系統中邏輯磁盤的一些信息,如磁盤卷標、磁盤序列號、空間大
我們在
編程的時候有時會需要得到系統中邏輯磁盤的一些信息,如磁盤卷標、磁盤序列號、空間大小、剩余空間等,這些信息直接使用
VB提供的函數顯然是無法得到的。但是,借助于VB對
WINDOWS API函數的支持,使用GetVolumeInformation和 GetDiskFreeSpace這兩個API函數,我們就可以很容易的得到磁盤的相關信息。
先來談談這兩個函數。GetVolumeInformation函數用于獲取與一個磁盤卷有關的信息,包括磁盤卷標、磁盤的序列號、文件的全路徑名中“\”與“\”之間部分的長度、文件系統的名稱以及文件系統的某些特性。GetDiskFreeSpace函數用于獲取與一個磁盤組織有關的信息,以及了解剩余空間的容量,包括磁盤上的總簇數、剩余簇數、一個簇內的扇區數和一個扇區內的字節數。
接下來看看具體的例子。
進入VB中,在窗體上加入一個驅動器列表框(DriveListBox)和一個列表框(ListBox),然后加入以下的腳本:
Option Explicit
Private Declare Function GetVolumeInformation
Lib "kernel32" Alias
"GetVolumeInformationA" (ByVal lpRootPathName As
String, ByVal lpVolumeNameBuffer As
String, ByVal nVolumeNameSize As Long,
lpVolumeSerialNumber As Long,
lpMaximumComponentLength As Long,
lpFileSystemFlags As Long, ByVal
lpFileSystemNameBuffer As String,
ByVal nFileSystemNameSize As Long) As Long
Private Declare Function GetDiskFreeSpace
Lib "kernel32" Alias "GetDiskFreeSpaceA"
(ByVal lpRootPathName As String, lpSectorsPerCluster
As Long, lpBytesPerSector As Long,
lpNumberOfFreeClusters As Long,
lpTotalNumberOfClusters As Long) As Long
Private Const FS_CASE_IS_PRESERVED = &H2
Private Const FS_CASE_SENSITIVE = &H1
Private Const FS_UNICODE_STORED_ON_
DISK = &H4
Private Const FS_PERSISTENT_ACLS = &H8
Private Const FS_FILE_COMPRESSION = &H10
Private Const FS_VOL_IS_COMPRESSED =
&H8000
Private Sub Drive1_Change()
Dim Volume As String, SysName As String
Dim SerialNum As Long, SysFlags As Long,
ComponentLength As Long, Res As Long
Dim SectorsPerCluster As Long, BytesPerSector
As Long, NumberOfFreeClustors As
Long, TotalNumberOfClustors As Long
Dim FreeBytes As Long, TotalBytes As Long,
PercentFree As Long, Dl As Long
Dim DrvName As String
List1.Clear
Volume = String(256, 0)
SysName = String(256, 0)
DrvName = Left(Drive1.Drive, 2) & "\"
Res = GetVolumeInformation(DrvName,
Volume, 255, SerialNum, _
ComponentLength, SysFlags, SysName, 255)
If Res = 0 Then
List1.AddItem "不能得到磁盤信息"
Else
List1.AddItem "卷標: " & Trim(Volume)
List1.AddItem "序列號: " & SerialNum
List1.AddItem "成分長度: " & ComponentLength
List1.AddItem "文件系統: " & Trim(SysName)
Dl = GetDiskFreeSpace(DrvName,
SectorsPerCluster, BytesPerSector,
NumberOfFreeClustors, TotalNumberOfClustors)
List1.AddItem "每簇中扇區數: "
& Format(SectorsPerCluster, "#,0")
List1.AddItem "每扇區中字節數: "
& Format(BytesPerSector, "#,0")
List1.AddItem "總簇數: "
& Format(TotalNumberOfClustors, "#,0")
List1.AddItem "剩余簇數: "
& Format(NumberOfFreeClustors, "#,0")
TotalBytes = TotalNumberOfClustors *
SectorsPerCluster * BytesPerSector
List1.AddItem "總字節數:
" & Format(TotalBytes, "#,0")
FreeBytes = NumberOfFreeClustors
* SectorsPerCluster * BytesPerSector
List1.AddItem "剩余字節數: "
& Format(FreeBytes, "#,0")
If SysFlags And FS_CASE_IS_PRESERVED Then
List1.AddItem "文件名的大小寫記錄于文件系統"
End If
If SysFlags And FS_CASE_SENSITIVE Then
List1.AddItem "文件名要區分大小寫"
End If
If SysFlags And FS_UNICODE_STORED_
ON_DISK Then
List1.AddItem "文件名保存為 Unicode 格式"
End If
If SysFlags And FS_PERSISTENT_ACLS Then
List1.AddItem "文件系統支持文件的訪問
控制列表(ACL)
安全機制"
End If
If SysFlags And FS_FILE_COMPRESSION Then
List1.AddItem "文件系統支持逐文件地進行文件壓縮"
End If
If SysFlags And FS_VOL_IS_COMPRESSED Then
List1.AddItem "整個磁盤卷都是壓縮的"
End If
End If
End Sub
Private Sub Form_Load()
Call Drive1_Change
End Sub
運行后,選擇驅動器列表框中的不同驅動器,列表框中就會顯示出該驅動器的相應信息。以上程序在VB5.0、VB6.0及WINDOWS 98中運行通過。
轉載自計算機世界日報 (文/嚴冬)
原文轉自:http://www.kjueaiud.com
老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月
|