論理ドライブからデバイスマッピング名を取得する
Windowsの論理ドライブ名*1からデバイスマッピング名*2を取得するサンプル。
連想配列を使うとよさそうなので連想配列に格納したよっ。
#include <cstdio> #include <cstdlib> #include <cstring> #include <string> #include <map> #include <Windows.h> using namespace std; typedef map<string, string> StrMap; typedef pair<string, string> StrPair; void CollectDrives( StrMap &map ); int main() { StrMap drives; CollectDrives( drives ); for ( StrPair t : drives ) printf( "%s -> %s\n", t.first.c_str(), t.second.c_str() ); return 0; } void CollectDrives( StrMap &map ) { char drives[ 1024 ] = { 0 }; char *lpDrives = drives; // 全論理ドライブを取得 GetLogicalDriveStrings( _countof( drives ), drives ); while ( *lpDrives != '\0' ) { string drive( lpDrives ); char buffer[ 1024 ] = { 0 }; // 末尾の'\'を削除 for ( size_t i = drive.find_first_of( '\\' ); i != string::npos; i = drive.find_first_of( '\\' ) ) drive.erase( i, 1 ); // デバイスマッピング名を取得 QueryDosDevice( drive.c_str(), buffer, _countof( buffer ) ); map.insert( make_pair( drive, string( buffer ) ) ); lpDrives += strlen( lpDrives ) + 1; } }
以下、実行結果。あくまで環境依存。
C: -> \Device\HarddiskVolume4 D: -> \Device\HarddiskVolume6 T: -> \Device\HarddiskVolume11 V: -> \Device\HarddiskVolume8 W: -> \Device\HarddiskVolume9 X: -> \Device\CdRom0