使用可能なドライブ名を列挙

先日バイト先で、あるアプリケーションのINIファイルを書きかえるプログラムを作って くれと頼まれました。ところがそのINIファイルはどのドライブにあるか分かりません。 使用されているハードディスクのドライブをしらみつぶしで探すしかないのですが、どの 様にすればよいのでしょうか?

というわけで今回のテクニックになります。
まず、使用されているドライブ名を取得するには GetLogicalDrives();の返戻値を用います。 GetLogicalDrivesの返戻値はDWORDなので32bitあり、下位のビットからA〜Zドライブを 表し、0なら使われていない1なら使われているという情報を保持しています。
例えばA,C,Dドライブが使える状態の場合、値は
00000000000000000000000000001101になります。

次にそのドライブがどんなタイプのドライブかをGetDriveTypeの返戻値を使って調べます。 この関数でリムーバブル、ネットワーク、ハードディスクなどのタイプを知ることができます。
ちなみにドライブが使われていない場合も調べることができるので、こちらの関数だけで全て用事を済ますことが できなくもありません

以下に、使えるドライブ名とタイプ(一部)を表示するサンプルプログラムを載せておきます

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

void main(void)
{
    int flag=1;
    DWORD drive=GetLogicalDrives();
    char moji[20];

    for(int z=0;z<25;z++,flag<<=1)
    {
        if(drive&flag)
        {
            //このドライブは使える
            printf("%c drive ",'A'+z);
            wsprintf(moji,"%c:\\",'A'+z);
            switch(GetDriveType(moji))
            {
            case DRIVE_REMOVABLE:
                printf("リムーバブルディスク(フロッピーも入るよ)\n");
                break;
            case DRIVE_FIXED:
                printf("ハードディスクかな?\n");
                break;
            case DRIVE_REMOTE:
                printf("ネットワークドライブだぁ\n");
                break;
            case DRIVE_CDROM:
                printf("つぇーでぇー\n");
                break;
            }
        }
    }
}

関数の引数部分については、説明してないので各自マニュアルを参照してください。

戻る