使用GetLogicalDriveStrings()获取未知数据

sma*_*llB 2 c++ winapi

使用以下代码获取驱动器的名称:

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);
}  
Run Code Online (Sandbox Code Playgroud)

因此我得到了以下输出(循环遍历drives_letters):

: //what on earth is this?  
C 
D 
E 
F 
G 
I 
\ //and what on earth is this?  
Run Code Online (Sandbox Code Playgroud)

Jon*_*Jon 11

GetLogicalDriveStrings返回表单中的字符串C:\.这可以从本文档段落中推断出来:

缓冲区中的每个字符串都可以在需要根目录的任何地方使用,例如GetDriveType和和GetDiskFreeSpace函数.

由于您将这些字符放入一个不允许重复的集合中,因此最终会得到所有不同的驱动器号以及一个双冒号和反斜杠的副本.并且冒号首先打印并且反斜杠最后的原因是它std::set本身是有序的,因此每个字符的ASCII码决定.