[分享] 数据恢复编程学习:C++获取本地磁盘驱动器的盘符、类型

[复制链接]

该用户从未签到

1

主题

0

回帖

11

积分

[INTOHARD]工兵

Rank: 1

积分
11
发表于 2015-3-26 22:05:22 | 显示全部楼层 |阅读模式
数据恢复编程学习:C++获取本地磁盘驱动器的盘符、类型
2015-03-26

002437692.jpg

  1. #include<windows.h>
  2. #include<tchar.h>
  3. #include<iostream>

  4. char *DispDriveType(int n)
  5. {
  6.         switch (n)//
  7.         {
  8.         case 0: //DRIVE_UNKNOWN
  9.                 return "未知磁盘";
  10.                 break;
  11.         case 1://
  12.                 return"磁盘不存在";
  13.                 break;
  14.         case 2://
  15.                 return"可移动硬盘";
  16.                 break;
  17.     case 3://
  18.                 return"本地磁盘";
  19.                 break;
  20.         case 4://
  21.                 return"网络驱动器";
  22.         case 5://
  23.                 return"CD/DVD_ROM";
  24.         case 6://
  25.                 return"随机存取磁盘";
  26.                 break;
  27.                
  28.         }
  29.        
  30. }
  31. void main()
  32. {
  33.         using namespace std;
  34.         TCHAR a[256];
  35.         DWORD len=GetLogicalDriveStrings(sizeof(a)/sizeof(TCHAR),a);// sizeof(a)/sizeof(TCHAR) 声明的是一个包含256个TCHAR类型字符的数组,所以相除还是256
  36.         cout << "磁盘编号"<<"\t\t" <<"磁盘类型" << endl;
  37.         for(TCHAR *s = a;*s;s+=_tcslen(s)+1)

  38.                 // *s = a是for初始化的地方,指的是把*s指向a数组开头的那个字符.
  39.             //*s为判断条件.当s指向的地方不为0,也就是还没到'\0'的时候那么继续循环
  40.             //s+=_tcslen(s)+1指的是跳转到下一个字符串开头的地方,这是和GetLogicalDriveStrings配套用的
  41.                         /*
  42.                         举个例子 GetLogicalDriveStrings假设返回的字符串如下:"C:\0D:\0E\0\0\0\0\0...."
  43.                         最后\0填充的大小应该和你填进去的sizeof(a)/sizeof(TCHAR)有关
  44.                         那么当*s = a时 s指向的字符串是"C:"因为看到\0就认为字符串结束了开始循环
  45.             1:*s = 'C' -> 执行循环体 -> _tcslen(s) 相当于 _tcslen("C:")等于2, +1=3 -> s+=_tcslen(s)+1 s指向"D:"*/
  46.         {
  47.                 cout << s << "\t\t" << DispDriveType(GetDriveType(s)) << endl;

  48.         }

  49.         cin.get();

  50. }
复制代码

该用户从未签到

2

主题

1132

回帖

1003

积分

[INTOHARD]工兵

Rank: 1

积分
1003
发表于 2015-3-29 14:25:04 | 显示全部楼层
wanted a complied program please
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表