プログラミングのメモ帳(C/C++/HSP)

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

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

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 コマンドで仮想ドライブ化してるので表示されます。

関連記事



コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« ドライブの種類を調べる | トップ | ドライブのボリューム情報を取得 »
最新の画像もっと見る

コメントを投稿

ディスク関連」カテゴリの最新記事