我需要帮助我的一个程序,它可以在系统上提取可用的驱动器并打印有关驱动器的各种信息。我使用的是VC ++,对C ++来说还是一个新手,需要一些高级输入或经验丰富的程序员的示例代码。
以下是我当前的源代码:
#include "stdafx.h"
#include Windows.h
#include stdio.h
#include iostream
using namespace std;
int main()
{
// Initial Dummy drive
WCHAR myDrives[] = L" A";
// Get the logical drive bitmask (1st drive at bit position 0, 2nd drive at bit position 1... so on)
DWORD myDrivesBitMask = GetLogicalDrives();
// Verifying the returned drive mask
if(myDrivesBitMask == 0)
wprintf(L"GetLogicalDrives() failed with error code: %d\n", GetLastError());
else {
wprintf(L"This machine has the following logical drives:\n");
while(myDrivesBitMask) {
// Use the bitwise AND with 1 to identify
// whether there is a drive present or not.
if(myDrivesBitMask & 1) {
// Printing out the available drives
wprintf(L"drive %s\n", myDrives);
}
// increment counter for the next available drive.
myDrives[1]++;
// shift the bitmask binary right
myDrivesBitMask >>= 1;
}
wprintf(L"\n");
}
system("pause");
}
` - 这是输出 -
This machine has the following logical drives:
drive C
drive D
drive E
drive F
drive G
drive H
drive I
我需要输出有关每个驱动器的其他信息(也许一个例子会在更短的时间内讲述故事):
驾驶 - C:\ 驱动器类型:固定 Drive Ready状态:正确 卷标:引导驱动器 文件系统类型:NTFS 自由空间:30021926912 总驱动器大小:240055742464
开车 - D:\ 驱动器类型:固定 Drive Ready状态:正确 卷标:应用数据 文件系统类型:NTFS 可用空间:42462507008 总驱动器尺寸:240054693888
我可以使用哪些方法,libs api等来提取驱动器类型,驱动器状态,卷标,文件系统类型,可用空间和总驱动器大小?
*旁注,我注意到我的预处理器指令存在缺陷,特别是在标准I / O头文件中。我知道这不是推荐的方法,使用printf和cout是类型安全的,并且正确的路线,但我无法弄清楚如何在cout中格式化输出,就像你在wprintf(L"drive %s\n", myDrives);.... so how would you do this with cout??
中所做的那样
提前致谢。
答案 0 :(得分:2)
您希望查看GetVolumeInformation等函数来检索文件系统信息,例如可用空间和卷名。
GetDriveType将为您提供有关驱动器类型的一些基本信息,但USB拇指杆和闪存读取器可以提供令人惊讶的结果。
我不确定你的“准备状态”是什么意思。如果您的意思是驱动器中是否存在有效卷,则可以尝试使用路径为“\\。\ C:”的CreateFile
来尝试打开卷。如果失败则没有卷(磁盘)存在。这将用于SD卡读卡器。要在没有出现错误对话框的情况下执行此操作,您需要先调用SetErrorMode(SEM_NOOPENFILEERRORBOX)
。
答案 1 :(得分:0)
要检查驱动器是否准备就绪,您还可以使用GetDiskFreeSpaceEx。如果此操作失败,则驱动器未准备就绪/可用。
以下是一些示例代码:http://pinvoke.net/default.aspx/coredll/GetDiskFreeSpaceEx.html