파일 시스템과 볼륨에 대한 정보를 얻는다

● 선언
privat declare Function GetVolumeInformation Lib "kernel32.dll" 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

● 인수
lpRootPathName ━ 알고자 하는 볼륨의 루트 디렉토리, Null이면 현재 작업 디렉토리 지정된다. 네트워크 드라이브면 UNC로 지정에서 공유까지만 지정
lpVolumeNameBuffer ━ 볼륨의 이름을 받을 버퍼
nVolumeNameSize ━ lpVolumeNameBuffer 버퍼 길이
lpVolumeSerialNumber ━ 시리얼 번호
lpMaximumComponentLength ━ 파일명의 최대 길이
lpFileSystemFlags ━ 파일 플래그
lpFileSystemNameBuffer ━ 파일 시스템명
nFileSystemNameSize ━ lpFileSystemNameBuffer 버퍼 길이

● 반환

성공 ━ 0이 아닌 값
실패 ━ 0

GetVolumeInformation 사용해서 드라이브의 정보를 얻을수 있다.

다음은 소스의 결과 이미지 이다.

다은은 소스이다
Option Explicit

Private Declare Function GetLogicalDriveStrings Lib "kernel32" Alias "GetLogicalDriveStringsA" (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long
Private Declare Function GetDriveType Lib "kernel32" Alias "GetDriveTypeA" (ByVal nDrive As String) As Long
Private Declare Function GetVolumeInformation Lib "kernel32.dll" 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 Const MAXBUFFER = &HFF
Private Const DRIVE_FIXED = 3

Private Sub cobDrive_Click() ' 드라이브 선택
    If cobDrive.Tag = CStr(cobDrive.ListIndex) Then Exit Sub
    labResult.Caption = GetDriveInfo(cobDrive.List(cobDrive.ListIndex))
    cobDrive.Tag = cobDrive.ListIndex
End Sub

Private Sub Form_Load()
    Dim Buffer As String ' 전체 드라이브명
    Dim DriveName() As String ' 각 드라이브명
    Dim ForCounter As Long ' For 카운터
    Dim NumberDrive As Long ' 드라이브 수
   
    Buffer = Space(MAXBUFFER) ' 콤보박스에 하드드라이브명을 지정한다.
    GetLogicalDriveStrings MAXBUFFER, Buffer
    DriveName = Split(Buffer, vbNullChar)
    NumberDrive = UBound(DriveName)
    For ForCounter = 0 To NumberDrive
        If GetDriveType(DriveName(ForCounter)) = DRIVE_FIXED Then
            cobDrive.AddItem Left(DriveName(ForCounter), InStrRev(DriveName(ForCounter), "\") - 1)
        End If
    Next ForCounter
    cobDrive.ListIndex = 0
End Sub

Private Function GetDriveInfo(ByVal DriveName As String) As String ' 드라이브 정보를 얻는다.
    Dim VolumeName As String  ' 볼륨명
    Dim SerialNumber As Long  ' 시리얼 번호
    Dim SerialNumberString As String ' 문자열로 변경한 시리얼 번호
    Dim MaxFileNameLength As Long  ' 최대 파일명 길이
    Dim sysflags As Long    ' 파일 시스템과 관련된 플래그
    Dim FileSystemName As String ' 파일 시스템명

    DriveName = DriveName & "\"
    VolumeName = Space(MAXBUFFER)
    FileSystemName = Space(256)
    Call GetVolumeInformation(DriveName, VolumeName, MAXBUFFER, SerialNumber, MaxFileNameLength, 0&, FileSystemName, MAXBUFFER)
    SerialNumberString = Trim(Hex(SerialNumber))
    SerialNumberString = String(8 - Len(SerialNumberString), "0") & SerialNumberString
    SerialNumberString = Left(SerialNumberString, 4) & "-" & Right(SerialNumberString, 4)
    GetDriveInfo = "Volume Name: " & GetString(VolumeName)
    GetDriveInfo = GetDriveInfo & vbCrLf & "Serial Number: " & SerialNumberString
    GetDriveInfo = GetDriveInfo & vbCrLf & "Max File Name Length: " & MaxFileNameLength
    GetDriveInfo = GetDriveInfo & vbCrLf & "File System: " & GetString(FileSystemName)
End Function

Private Function GetString(ByVal APIStr As String) As String ' 버퍼로 사용된 문자열에서 유효한 문자열만 반환
    GetString = Left$(APIStr, InStr(APIStr, vbNullChar) - 1)
End Function

드라이브 정보를 얻기 위해 FileSystemObject의 GetDrive를 사용해도
드라이브의 정보를 얻을수 있다.
FileSystemObject를 사용하기 위해서는  Microsoft Scripting Runtime 참조하면 된다.

+ Recent posts