GetLogicalDriveStrings 有効なドライブ名の取得

Cの宣言:

DWORD GetLogicalDriveStrings(DWORD DriveNamesSize, LPTSTR DriveNames);

説明:

有効なすべてのドライブのルートパスを取得する。ディスクの挿入の有無や、ネットワークの接続の有無とは無関係に、現在割り当てられているすべてのドライブ名を取得する。

ドライブ名の一覧は、DriveNamesに指定したバッファに、各ドライブ名がNULLで区切られて格納される。終端には、二つのNULLが格納される。

引数の意味は、以下の通り。
DriveNamesSize (IN) バッファの大きさ
DriveNames (OUT) ドライブ名の一覧を格納するためのバッファ。

戻り値は、バッファに格納されたデータの実際のサイズ。DriveNamesSizeで指定したバッファのサイズが小さすぎるときは、必要なバッファのサイズを返す。関数の実行に失敗した場合、0が返される。

Cのサンプル:

void DispLogicalDriveStrings()
{
	char buf[1000];
	DWORD buf_size, cnt;

	buf_size = GetLogicalDriveStrings(1000, buf);

	cnt = 0;
	printf("有効なドライブの一覧:\n");
	while(cnt<buf_size) {
		printf("%s\n", &buf[cnt]);
		cnt += lstrlen(&buf[cnt])+1;
	}
}

VBのサンプル:

' 有効なドライブ名の一覧を表示
Private Sub DispLogicalDriveStrings()
	Const DrivesSize As Long = 105

	Dim Drives As String * DrivesSize
	Dim DLetter As String
	Dim Idx As Long
	Dim NextDelim As Long
	Dim Msg As String

	'ドライブ名一覧の取得
	GetLogicalDriveStrings DrivesSize, Drives

	Idx = 1
	NextDelim = InStr(Idx, Drives, vbNullChar)

	'メッセージの作成
	Do
		Msg = Msg & Mid(Drives, Idx, NextDelim - Idx) & vbCr
		Idx = NextDelim + 1
		NextDelim = InStr(Idx, Drives, vbNullChar)
	Loop While Idx <> NextDelim

	'メッセージの表示
	MsgBox Msg
End Sub


(original text:1998/12/25 更新)

本ドキュメントの内容は保証しません。本ドキュメントによって生じた結果について、一切の責任を負いません。