Advertisement
Guest User

Untitled

a guest
Jan 17th, 2018
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.05 KB | None | 0 0
  1. #include "stdafx.h"
  2. #include <iostream>
  3. #include "windows.h"
  4. #include <string>
  5.  
  6. using namespace std;
  7.  
  8. int main()
  9. {
  10.     setlocale(0, ""); //для потдержки кирилицы в консоли
  11.  
  12.     string St("ABCDEFGHIJKLMNOPQRSTUVWXYZ");
  13.     DWORD res = GetLogicalDrives(); // Функция GetLogicalDrives возвращает число-битовую маску в которой храняться все
  14.                                     //доступные диски.
  15.     int t = 1;
  16.  
  17.     for (int i = 0; i < 26; i++)
  18.     {
  19.         if ((res & t) == t) // проверяем если  res[i] = 1. В данном случае 1 указывает что диск присутствует.
  20.         { // & операция побитового И
  21.             cout << St[i] << ":\\" << endl; //выводим имеющийся диск
  22.  
  23.             string s(3, ' '); // создаю массив на три элемента пустой для получения отдельных символов
  24.             s[0] = St[i];
  25.             s[1] = ':';
  26.             s[2] = '\\';
  27.  
  28.  
  29.             /*A - ASCII
  30.             W - unicode
  31.             GetDriveTypeA - функция, которая работает с ASCII строкой.*/
  32.  
  33.             switch (GetDriveTypeA(LPCSTR(s.data()))) // тип диска. Data для форматиров
  34.                                                      //LPCSTR – указатель на константную строку, заканчивающуюся нуль-терминатором. От фразы long pointer constant string.
  35.             {
  36.             case 0:cout << "DRIVE_UNKNOWN" << endl; break;
  37.             case 1:cout << "DRIVE_NO_ROOT_DIR" << endl; break;
  38.             case 2:cout << "DRIVE_REMOVABLE" << endl; break;
  39.             case 3:cout << "DRIVE_FIXED" << endl; break;
  40.             case 4:cout << "DRIVE_REMOTE" << endl; break;
  41.             case 5:cout << "DRIVE_CDROM" << endl; break;
  42.             case 6:cout << "DRIVE_RAMDISK" << endl; break;
  43.             default:cout << "Ошибка!"; break;
  44.             }
  45.  
  46.             char NameBuffer[MAX_PATH]; //MP возвращает каталог соответствующей переменной окружения
  47.             char SysNameBuffer[MAX_PATH];
  48.             DWORD VSNumber;
  49.             DWORD MCLength;
  50.             DWORD FileSF;
  51.  
  52.  
  53.             if (GetVolumeInformationA(LPCSTR(s.data()), NameBuffer, sizeof(NameBuffer),
  54.                 &VSNumber, &MCLength, &FileSF, SysNameBuffer, sizeof(SysNameBuffer)))
  55.  
  56.             cout << endl;
  57.             cout << "Название диска: " << NameBuffer << endl;
  58.             cout << "Имя файловой системы: " << SysNameBuffer << endl; //тип
  59.             cout << "Cерийный номер: " << VSNumber << endl; //серийный номер
  60.  
  61.  
  62.  
  63.  
  64.  
  65.             ULARGE_INTEGER free, total, aviable;
  66.  
  67.             if (GetDiskFreeSpaceExA(s.data(), &aviable, &total, &free))
  68.             { //QuadPart — это LONGLONG, который в свою очередь __int64. Работая с QuadPart мы посути работаем с __int64.
  69.                 cout << "Доступно места: " << aviable.QuadPart / 1073741824 <<
  70.                     " ГБ\nВсего: " << total.QuadPart / 1073741824 <<
  71.                     " ГБ\nСвободно: " << free.QuadPart / 1073741824 << " ГБ\n";
  72.                 cout << endl;
  73.             }
  74.  
  75.         }
  76.  
  77.         t *= 2;
  78.     }
  79.  
  80.  
  81.  
  82.     system("pause");
  83.     return 0;
  84.  
  85. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement