ドライブのファイル名最大長を取得 <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