怎样读取硬盘分区信息 怎样读取硬盘的详细分区信息,包括各逻辑分区的大小等信息,VC是否有API直接操作,请大虾们指点。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 为了确定某个逻辑驱动器的类型,必须调用GetDriveType函数。它以路径名作为参数(如C:\),返回DRIVE_FIXED,DRIVE_REMOVABLE,或DRIVE_UNKNOWN。下面列出了所有可能返回的值:这些值在winbase.h定义#define DRIVE_UNKNOWN 0 // 无效路径名#define DRIVE_NO_ROOT_DIR 1 // 无效路经,如无法找到的卷标#define DRIVE_REMOVABLE 2 // 可移动驱动器(如磁盘驱动器,光驱等)#define DRIVE_FIXED 3 // 固定的驱动器 (如 通常的硬盘)#define DRIVE_REMOTE 4 // 网络驱动器#define DRIVE_CDROM 5 // CD-ROM#define DRIVE_RAMDISK 6 // 随机存取(RAM) 磁盘 为了更容易说明问题,我写了一个小程序--ListDrives,它可以列出某台机器上所有的逻辑驱动器。其实现代码如下: ListDrives.cpp #include "stdafx.h"#include "resource.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endifusing namespace std; // for string class// 下面是一个GetDriveType返回码与人可读字符串的迷你对照表//struct { UINT type; // GetDriveType返回码类型 LPCSTR name; // ascii 名称} DriveTypeFlags [] = { { DRIVE_UNKNOWN, "未知" }, { DRIVE_NO_ROOT_DIR, "无效路经" }, { DRIVE_REMOVABLE, "可移动" }, { DRIVE_FIXED, "固定" }, { DRIVE_REMOTE, "网络驱动器" }, { DRIVE_CDROM, "CD-ROM" }, { DRIVE_RAMDISK, "随机存取磁盘" }, { 0, NULL},};int _tmain(int argc, TCHAR* argv[], TCHAR* envp[]){ if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0)) { cerr << _T("Fatal Error: MFC initialization failed") << endl; return -1; } // 获取逻辑驱动器字符串- a:\b:\c:\... 等. // 还可以用GetLogicalDrives 以位图形式代替字符串形式获取信息 TCHAR buf[100]; DWORD len = GetLogicalDriveStrings(sizeof(buf)/sizeof(TCHAR),buf); // 显示每个驱动器的信息 // string msg = "Logical Drives:\n"; // STL string for (TCHAR* s=buf; *s; s+=_tcslen(s)+1) { LPCTSTR sDrivePath = s; msg += sDrivePath; msg += " "; // GetDriveType 获取枚举值,如DRIVE_UNKNOWN等. // UINT uDriveType = GetDriveType(sDrivePath);// 查找驱动器类型。在此我用了表(结构数组)来进行查找处理,过于繁琐了一些,// 但既然uDriveType 的值是连续的。// 我可以用DriveTypeFlags[uDriveType]来代替线性查找。在实际的编程中通常可以这么做:// if (uDriveType & DEVICE_CDROM) { ……// } // for (int i=0; DriveTypeFlags[i].name; i++) { if (uDriveType == DriveTypeFlags[i].type) { msg += DriveTypeFlags[i].name; break; } } msg += ''''''''''''''''\n''''''''''''''''; } cout << msg.c_str(); return 0;} 程序代码很简单,它是一个MFC程序。用GetLogicalDriveStrings获取所有逻辑驱动器的根路径名,然后调用GetDriveType来确定每个驱动器的类型。如果你要找CD-ROM,则检查uDriveType = DRIVE_CDROM就可以了。 CTreeCtrl有GDI泄露, 怎么搞定啊? 求助思路,图层蒙版效果 求教熟悉RichEditCtrl的请进。 散分广交学习VC 的朋友 提示:内存不足!有什么好的方法? 结构强制转换成CObject后如何复原呢?? MFC DLL 动态链接库? ★〖游戏中的地图卷动怎样实现〗★ 想做一类似CToolTipCtrl的东东, 但可以支持多行显示, 哪位会? 请~~~~ 如何做到,让鼠标点击按钮后,按钮上不出现虚线框!? 请教:有谁知道DirectDraw中的裁减器如何使用? 请教高手,如何获取另一个应用程序窗口中的编辑控件中的字符信息?
#define DRIVE_NO_ROOT_DIR 1 // 无效路经,如无法找到的卷标
#define DRIVE_REMOVABLE 2 // 可移动驱动器(如磁盘驱动器,光驱等)
#define DRIVE_FIXED 3 // 固定的驱动器 (如 通常的硬盘)
#define DRIVE_REMOTE 4 // 网络驱动器
#define DRIVE_CDROM 5 // CD-ROM
#define DRIVE_RAMDISK 6 // 随机存取(RAM) 磁盘
为了更容易说明问题,我写了一个小程序--ListDrives,它可以列出某台机器上所有的逻辑驱动器。其实现代码如下: ListDrives.cpp #include "stdafx.h"
#include "resource.h"#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endifusing namespace std; // for string class// 下面是一个GetDriveType返回码与人可读字符串的迷你对照表
//
struct {
UINT type; // GetDriveType返回码类型
LPCSTR name; // ascii 名称
} DriveTypeFlags [] = {
{ DRIVE_UNKNOWN, "未知" },
{ DRIVE_NO_ROOT_DIR, "无效路经" },
{ DRIVE_REMOVABLE, "可移动" },
{ DRIVE_FIXED, "固定" },
{ DRIVE_REMOTE, "网络驱动器" },
{ DRIVE_CDROM, "CD-ROM" },
{ DRIVE_RAMDISK, "随机存取磁盘" },
{ 0, NULL},
};int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0)) {
cerr << _T("Fatal Error: MFC initialization failed") << endl;
return -1;
} // 获取逻辑驱动器字符串- a:\b:\c:\... 等.
// 还可以用GetLogicalDrives 以位图形式代替字符串形式获取信息 TCHAR buf[100];
DWORD len = GetLogicalDriveStrings(sizeof(buf)/sizeof(TCHAR),buf); // 显示每个驱动器的信息
//
string msg = "Logical Drives:\n"; // STL string
for (TCHAR* s=buf; *s; s+=_tcslen(s)+1) {
LPCTSTR sDrivePath = s;
msg += sDrivePath;
msg += " "; // GetDriveType 获取枚举值,如DRIVE_UNKNOWN等.
//
UINT uDriveType = GetDriveType(sDrivePath);// 查找驱动器类型。在此我用了表(结构数组)来进行查找处理,过于繁琐了一些,
// 但既然uDriveType 的值是连续的。
// 我可以用DriveTypeFlags[uDriveType]来代替线性查找。在实际的编程中通常可以这么做:
// if (uDriveType & DEVICE_CDROM) {
……
// }
//
for (int i=0; DriveTypeFlags[i].name; i++) {
if (uDriveType == DriveTypeFlags[i].type) {
msg += DriveTypeFlags[i].name;
break;
}
}
msg += ''''''''''''''''\n'''''''''''''''';
}
cout << msg.c_str(); return 0;
}
程序代码很简单,它是一个MFC程序。用GetLogicalDriveStrings获取所有逻辑驱动器的根路径名,然后调用GetDriveType来确定每个驱动器的类型。如果你要找CD-ROM,则检查uDriveType = DRIVE_CDROM就可以了。