プログラミングのメモ帳

日々のプログラミングで気づいた点や小技(Tips)などを紹介します。(Windows XP/Vista、VC2008)

有効なドライブ名を調べる

2007年09月24日 07時29分17秒 | ディスク関連

システムで利用可能なドライブ名を調べるには次の関数を使います。(戻る)

  1. ドライブのビットで取得(GetLogicalDrives)
  2. ドライブの文字列で取得(GetLogicalDriveStrings)

GetLogicalDrives 関数は DWORD 型のビットデータを戻り値で返します。
GetLogicalDriveStrings 関数は文字列で有効なドライブ名を返します。
このインターフェイスの違いだけで同じ機能です。

プロトタイプ宣言

DWORD GetLogicalDrives( VOID );

DWORD GetLogicalDriveStrings(
    DWORD       nSize,      // バッファ領域のサイズ
    LPTSTR      lpBuff      // バッファ領域のポインタ
);

サンプル

#include <stdio.h>
#include <string.h>
#include <windows.h>

// メイン関数
int main( void )
{
    TCHAR   szBuff[ 128 ];      // 最低でも(4 * 26 + 1)バイト以上
    LPTSTR  lpSeek;
    DWORD   dwDrive;
    INT     nDrive;
    
    // ドライブのビットで取得
    printf( TEXT("GetLogicalDrives()関数のテスト\n") );
    printf( TEXT("\n") );
    dwDrive = GetLogicalDrives();
    for ( nDrive = 0 ; nDrive < 26 ; nDrive++ ){
        if ( dwDrive & (1 << nDrive) ){
            printf( TEXT("%c:\\\n"), (nDrive + TEXT('A')) );
        }
    }
    printf( TEXT("\n") );
    
    // ドライブの文字列で取得
    printf( TEXT("GetLogicalDriveStrings()関数のテスト\n") );
    printf( TEXT("\n") );
    GetLogicalDriveStrings( sizeof(szBuff), szBuff );
    for ( lpSeek = szBuff ; *lpSeek != TEXT('\0') ; lpSeek++ ){
        printf( TEXT("%s\n"), lpSeek );
        lpSeek += strlen( lpSeek );
    }
    printf( TEXT("\n") );
    return 0;
}

実行結果

GetLogicalDrives()関数のテスト

C:\
D:\
E:\
F:\
G:\
H:\
I:\
Z:\

GetLogicalDriveStrings()関数のテスト

C:\
D:\
E:\
F:\
G:\
H:\
I:\
Z:\
  • 私の環境ではFDD(フロッピー・ディスク・ドライブ)が存在しないので A: B: は表示されない。
  • パソコンに内蔵されたHDD(ハードディスク・ドライブ)が2つに分かれてるので C: D: が表示されます。
  • また、外付けで小型のHDD(ハードディスク・ドライブ)を2つ接続してるので F: G: も表示されます。
  • あと、USBフラッシュ・メモリを2つ接続してるので H: I: が表示されます。
  • 最後の Z: は C: ドライブのフォルダを SUBST コマンドで仮想ドライブ化してるので表示されます。

関連記事


『ソフトウェア』 ジャンルのランキング
コメント   この記事についてブログを書く
この記事をはてなブックマークに追加
« ドライブの種類を調べる | トップ | ドライブのボリューム情報を取得 »
最近の画像もっと見る

コメントを投稿


コメント利用規約に同意の上コメント投稿を行ってください。

数字4桁を入力し、投稿ボタンを押してください。

あわせて読む

トラックバック

この記事のトラックバック  Ping-URL
ブログ作成者から承認されるまでトラックバックは反映されません。