2012-01-14 7 views
2

をGetLogicalDriveStringsと、未知のデータを取得する:は私のドライブの名前を取得するために、以下のコードを使用して)(

const DWORD buffer_length = sizeof(DWORD)*CHAR_BIT; 
WCHAR buffer[buffer_length] = {0}; 
GetLogicalDriveStrings(buffer_length,buffer); 
std::set<wchar_t> drives_letters; 
for(auto e : buffer) 
{ 
    drives_letters.insert(e); 
} 

私は(drives_lettersをループ)結果として、次のような出力を取得しています:

: //what on earth is this? 
C 
D 
E 
F 
G 
I 
\ //and what on earth is this? 
+0

あなたはGetDriveTypeを試み、それが返すものを見たことがありますか? – dowhilefor

+0

@dowhileforちょうど今それに取り組んで – smallB

答えて

11

GetLogicalDriveStringsは、文字列をC:\の形式で返します。これは、この文書の通路から推測することができる。

ルートディレクトリは を必要とされる限り、バッファ内の各列は、GetDriveTypeGetDiskFreeSpace機能用として、使用することができます。

あなたは重複を許可していませんセット、にこれらの文字を入れているので、あなたはすべての異なるドライブ文字を加えたダブルコロンとバックスラッシュの一つのコピーで終わります。コロンが最初に印刷され、バックスラッシュが最後に印刷される理由は、std::setが本質的に順序付けられているため、各文字のASCIIコードが決定します。

+0

感謝します、ありがとう、受け入れます。 – smallB

3

forループが間違っています。 GetLogicalDriveStrings()は個々のドライブ文字のみを返すと仮定していますが、そうでない場合は(GetLogicalDrives()を使用してください)。これは、ルートフォルダを駆動するためのパスを返し、そのように、あなたは以下のあなたのforループを変更する必要があります。

const DWORD buffer_length = 104; // can return drive paths A:\ - Z:\ 
WCHAR buffer[buffer_length+1] = {0}; // room for null terminator 

GetLogicalDriveStrings(buffer_length, buffer); 
std::set<wchar_t> drives_letters; 
for(wchar_t *drive = buffer; *drive != 0; drive += 4) 
{ 
    drives_letters.insert(*drive); 
}   
関連する問題