ドライブのファイル名最大長を取得          <TOP>


GetLogicalDrives 利用可能ディスクドライブ取得
GetVolumeInformation ルートディレクトリが呼び出しで指定されたファイルシステムとボリュームについての情報を返す

 

'================================================================
'= ドライブのファイル名最大長を取得
'=    (MaxComponentLength.bas)
'================================================================
#include "Windows.bi"

#define MAX_PATH 260

' 利用可能ディスクドライブ取得
Declare Function Api_GetLogicalDrives& Lib "kernel32" Alias "GetLogicalDrives" ()

' ルート ディレクトリが呼び出しで指定されたファイルシステムとボリュームについての情報を返す
Declare Function Api_GetVolumeInformation& Lib "Kernel32" Alias "GetVolumeInformationA" (ByVal RootPathName$, ByVal VolNameBuff$, ByVal VolNameSize&, VolSerialNum&, MaxComponentLen&, FileSysFlag&, ByVal FileSysNameBuff$, ByVal FileSysNameSize&)

Var Shared Text1 As Object
Var Shared Combo1 As Object
Var Shared Button1 As Object

Text1.Attach GetDlgItem("Text1") : Text1.SetFontSize 14
Combo1.Attach GetDlgItem("Combo1") : Combo1.SetFontSize 14
Button1.Attach GetDlgItem("Button1") : Button1.SetFontSize 14

Var Shared Drive As String

'================================================================
'=
'================================================================
Declare Sub MainForm_Start edecl ()
Sub MainForm_Start()
    Drives = Api_GetLogicalDrives()      '利用可能なディスクドライブ取得
    If Drives = 0 Then Exit Sub          '関数の失敗

    For i = 0 To 25                      'A〜Zドライブを検索する
        If (Drives And 1) = 1 Then
            Drive = Chr$(65 + i)         'ドライブ名(A〜Z)に変換
            Drive = Drive & ":\"
            Combo1.AddString Drive
        End If
        Drives = Drives \ 2              'ドライブ検索
    Next i
End Sub

'================================================================
'=
'================================================================
Declare Sub Button1_on edecl ()
Sub Button1_on()
    Var PathName As String
    Var Buffer As String * MAX_PATH
    Var SerialNumber As Long
    Var MaxComponentLength As Long
    Var Flags As Long
    Var FileSystemName As String * 32
    Var Ret As Long

    '対象のルートパス名を指定
    PathName = Left$(Combo1.GetText(Combo1.GetCursel), 3)

    'ファイルシステムの情報を取得
    Ret = Api_GetVolumeInformation(PathName, Buffer, Len(Buffer), SerialNumber, MaxComponentLength, Flags, FileSystemName, Len(FileSystemName))

    'ファイル名最大長を取得できたとき
    If MaxComponentLength Then
        Text1.SetWindowText Str$(MaxComponentLength)
    Else
        Text1.SetWindowText "ドライブ選択"
    End If
End Sub

'================================================================
'=
'================================================================
While 1
    WaitEvent
Wend
Stop
End