Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "stdafx.h"
- #include <iostream>
- #include "windows.h"
- #include <string>
- using namespace std;
- int main()
- {
- setlocale(0, ""); //для потдержки кирилицы в консоли
- string St("ABCDEFGHIJKLMNOPQRSTUVWXYZ");
- DWORD res = GetLogicalDrives(); // Функция GetLogicalDrives возвращает число-битовую маску в которой храняться все
- //доступные диски.
- int t = 1;
- for (int i = 0; i < 26; i++)
- {
- if ((res & t) == t) // проверяем если res[i] = 1. В данном случае 1 указывает что диск присутствует.
- { // & операция побитового И
- cout << St[i] << ":\\" << endl; //выводим имеющийся диск
- string s(3, ' '); // создаю массив на три элемента пустой для получения отдельных символов
- s[0] = St[i];
- s[1] = ':';
- s[2] = '\\';
- /*A - ASCII
- W - unicode
- GetDriveTypeA - функция, которая работает с ASCII строкой.*/
- switch (GetDriveTypeA(LPCSTR(s.data()))) // тип диска. Data для форматиров
- //LPCSTR – указатель на константную строку, заканчивающуюся нуль-терминатором. От фразы long pointer constant string.
- {
- case 0:cout << "DRIVE_UNKNOWN" << endl; break;
- case 1:cout << "DRIVE_NO_ROOT_DIR" << endl; break;
- case 2:cout << "DRIVE_REMOVABLE" << endl; break;
- case 3:cout << "DRIVE_FIXED" << endl; break;
- case 4:cout << "DRIVE_REMOTE" << endl; break;
- case 5:cout << "DRIVE_CDROM" << endl; break;
- case 6:cout << "DRIVE_RAMDISK" << endl; break;
- default:cout << "Ошибка!"; break;
- }
- char NameBuffer[MAX_PATH]; //MP возвращает каталог соответствующей переменной окружения
- char SysNameBuffer[MAX_PATH];
- DWORD VSNumber;
- DWORD MCLength;
- DWORD FileSF;
- if (GetVolumeInformationA(LPCSTR(s.data()), NameBuffer, sizeof(NameBuffer),
- &VSNumber, &MCLength, &FileSF, SysNameBuffer, sizeof(SysNameBuffer)))
- cout << endl;
- cout << "Название диска: " << NameBuffer << endl;
- cout << "Имя файловой системы: " << SysNameBuffer << endl; //тип
- cout << "Cерийный номер: " << VSNumber << endl; //серийный номер
- ULARGE_INTEGER free, total, aviable;
- if (GetDiskFreeSpaceExA(s.data(), &aviable, &total, &free))
- { //QuadPart — это LONGLONG, который в свою очередь __int64. Работая с QuadPart мы посути работаем с __int64.
- cout << "Доступно места: " << aviable.QuadPart / 1073741824 <<
- " ГБ\nВсего: " << total.QuadPart / 1073741824 <<
- " ГБ\nСвободно: " << free.QuadPart / 1073741824 << " ГБ\n";
- cout << endl;
- }
- }
- t *= 2;
- }
- system("pause");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement