使用GetLogicalDriveStrings()获取未知数据
Getting unknown data with 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?
GetLogicalDriveStrings
返回形式为C:
的字符串。这可以从以下文档中推断出来:
缓冲区中的每个字符串都可以用于根目录所在的位置例如用于
GetDriveType
和GetDiskFreeSpace
功能。
由于您将这些字符放入一个集合中,不允许重复,因此您最终会得到所有不同的驱动器号加上一个双冒号和一个反斜杠。冒号打印在前,反斜杠打印在后的原因是std::set
本质上是有序的,所以每个字符的ASCII码决定了。
您的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);
}
相关文章:
- 继承期间显示未知行为的子类
- 输入中的字符串数未知(以字母表示)
- 具有未知值时的时间复杂性
- 链表中写入访问冲突的未知原因
- 正在生成未知类实例
- Bjarne Stroustrup Book - std_lib_facilities.h - 不起作用(未知类型名称)
- 读取文件时运行时的未知行为
- 代码在我的计算机上运行良好,但是在将其提交给coursera时遇到未知的信号11问题
- 初始化多个未知基类
- 使用 make 编译 MPI,几个命名空间错误,例如"错误:未知类型名称'使用'?
- 如何存储未知次数迭代的输入?
- QtQuick - qml:28:错误:未知方法返回类型:自定义类型
- 编译 Boost 时在 OS X 上的"ld:未知选项:-soname"
- 未知的 CMake 命令"create_single_source_cgal_program"
- 如何在C++中循环访问未知对象方法?
- Coursera :自动评分器的未知信号 11
- 即使直接从官方示例中复制,也找不到未知类型名称QML_ELEMENT和 QML 模块
- 未知的 GCC 链接器错误,但已成功构建
- 如何从未知视图中声明范围::v3::View 变量
- 如何创建一个未知数变量和未知类型变量的构造函数