|
数据恢复编程学习:C++获取本地磁盘驱动器的盘符、类型
2015-03-26
- #include<windows.h>
- #include<tchar.h>
- #include<iostream>
- char *DispDriveType(int n)
- {
- switch (n)//
- {
- case 0: //DRIVE_UNKNOWN
- return "未知磁盘";
- break;
- case 1://
- return"磁盘不存在";
- break;
- case 2://
- return"可移动硬盘";
- break;
- case 3://
- return"本地磁盘";
- break;
- case 4://
- return"网络驱动器";
- case 5://
- return"CD/DVD_ROM";
- case 6://
- return"随机存取磁盘";
- break;
-
- }
-
- }
- void main()
- {
- using namespace std;
- TCHAR a[256];
- DWORD len=GetLogicalDriveStrings(sizeof(a)/sizeof(TCHAR),a);// sizeof(a)/sizeof(TCHAR) 声明的是一个包含256个TCHAR类型字符的数组,所以相除还是256
- cout << "磁盘编号"<<"\t\t" <<"磁盘类型" << endl;
- for(TCHAR *s = a;*s;s+=_tcslen(s)+1)
- // *s = a是for初始化的地方,指的是把*s指向a数组开头的那个字符.
- //*s为判断条件.当s指向的地方不为0,也就是还没到'\0'的时候那么继续循环
- //s+=_tcslen(s)+1指的是跳转到下一个字符串开头的地方,这是和GetLogicalDriveStrings配套用的
- /*
- 举个例子 GetLogicalDriveStrings假设返回的字符串如下:"C:\0D:\0E\0\0\0\0\0...."
- 最后\0填充的大小应该和你填进去的sizeof(a)/sizeof(TCHAR)有关
- 那么当*s = a时 s指向的字符串是"C:"因为看到\0就认为字符串结束了开始循环
- 1:*s = 'C' -> 执行循环体 -> _tcslen(s) 相当于 _tcslen("C:")等于2, +1=3 -> s+=_tcslen(s)+1 s指向"D:"*/
- {
- cout << s << "\t\t" << DispDriveType(GetDriveType(s)) << endl;
- }
- cin.get();
- }
复制代码 |
|