Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.51/160: Рейтинг темы: голосов - 160, средняя оценка - 4.51
 Аватар для Xapl
3 / 3 / 0
Регистрация: 04.02.2009
Сообщений: 45

Как получить список дисков?

24.02.2009, 21:48. Показов 31037. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Буду писать вопросы кому не впадлу ответте.
1.Как получить список дисков все(a,d,c,e)?
2.Как узнать какие диски есьть CDROM?
3.Как получить список процесов и как их выключать?
4.Есьть вункция выключать комп(перезагружать и лог офф)?
все участвующие помогут очень сильно вашему новому "колгег")

Добавлено через 6 минут 25 секунд
"колгег" - "колгегe"
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
24.02.2009, 21:48
Ответы с готовыми решениями:

Получить список физических дисков
Здравствуйте! Как можно получить список имен физических дисков в формате PhysicalDriveN, где N - номер диска?

Получить список жестких дисков
Всем доброго времени суток. Прошу не кидаться в меня гнилыми овощами и нецензурной бранью, я только учусь 😁 Пишу программу,...

Как получить доступ к файлам через сетевую папку (создать файлы в сетевой или просто получить список)?
Как получить доступ к файлам через сетевую папку (создать файлы в сетевой или просто получить список) C++ Через FindFileData пробовал - не...

8
1 / 1 / 0
Регистрация: 24.02.2009
Сообщений: 6
24.02.2009, 21:54
Цитата Сообщение от Xapl Посмотреть сообщение
Буду писать вопросы кому не впадлу ответте.
1.Как получить список дисков все(a,d,c,e)?
2.Как узнать какие диски есьть CDROM?
3.Как получить список процесов и как их выключать?
4.Есьть вункция выключать комп(перезагружать и лог офф)?
все участвующие помогут очень сильно вашему новому "колгег")

Добавлено через 6 минут 25 секунд
"колгег" - "колгегe"

Информация о логических дисках

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
int n;
bool Flag;
DWORD dr = GetLogicalDrives(); // функция возвращает битовую маску
 
for(int x=0;x<26;x++) // проходимся циклом по битам
{
   n = ((dr>>x)&1); // узнаём значение текущего бита
   if(n) // если единица - диск с номером x есть
   {
      AnsiString dl = AnsiString((char)(65+x)); // получаем литеру диска
      AnsiString path = AnsiString((char)(65+x))+":\\";
 
      AnsiString out = "Диск " + dl + "\n";
 
      // здесь узнаём готово ли устройство
      WORD OldErrorMode;
      OldErrorMode = SetErrorMode(SEM_FAILCRITICALERRORS); // убираем показ ошибок
      bool ready = DirectoryExists(path); // пытаемcя открыть корневую директорию
      SetErrorMode(OldErrorMode); // восстанавливаем старый режим показа ошибок
 
      if (ready)
      {
         UINT drive_type = GetDriveType((dl+":\\").c_str()); // узнаём тип диска
         out += "\nТип диска: ";
         if (drive_type == DRIVE_REMOVABLE) out += "REMOVABLE";
         else if (drive_type == DRIVE_FIXED)     out += "FIXED";
         else if (drive_type == DRIVE_REMOTE)   out += "REMOTE";
         else if (drive_type == DRIVE_CDROM)     out += "CD-ROM";
         else if (drive_type == DRIVE_RAMDISK)   out += "RAMDISK";
         else out += "НЕИЗВЕСТНЫЙ_ТИП\n";
 
         // если это HDD - заприашиваем информацию о нем
         if (drive_type == DRIVE_FIXED)
         {
            unsigned __int64 FreeBytesAvailable;
            unsigned __int64 TotalNumberOfBytes;
            unsigned __int64 TotalNumberOfFreeBytes;
            char drive_label[30];
            char drive_fat[30];
            DWORD drive_sn;
            DWORD drive_name_size = sizeof(drive_label);
 
            // получаем данные о размерах
            Flag = ::GetDiskFreeSpaceEx(path.c_str(),
                           (PULARGE_INTEGER)&FreeBytesAvailable,
                           (PULARGE_INTEGER)&TotalNumberOfBytes,
                           (PULARGE_INTEGER)&TotalNumberOfFreeBytes
                           );
            if (Flag)
            {
               out += "\nСвободно на диске: " + AnsiString(TotalNumberOfFreeBytes) + "\n";
               out += "Всего на диске: " + AnsiString(TotalNumberOfBytes) + "\n";
            }
            else
            {
               out += "Ошибка в GetDiskFreeSpaceEx\n";
            }
 
            // получаем метку, серинийный номер и пр.
            Flag = GetVolumeInformation(path.c_str(),
                           drive_label,
                           sizeof(drive_label),
                           &drive_sn,
                           &drive_name_size,
                           NULL,
                           drive_fat,
                           sizeof(drive_fat)
                           );
            if (Flag)
            {
               out += "\nМетка тома: " + AnsiString(drive_label) + "\n";
               out += "Сер.номер: " + AnsiString(drive_sn) + "\n";
               out += "Файловая система: " + AnsiString(drive_fat) + "\n";
            }
            else
            {
               out += "Ошибка в GetVolumeInformation\n";
            }
         }
      }
      else
      {
         out += "НЕ ГОТОВ";
      }
      ShowMessage(out);
   }
}
Это конечно Билдер С++, но принцип почти тот же.

И в дальнейшем - есть google.
1
Заблокирован
25.02.2009, 10:13
Вот кусочек кода моего команедра, функция GetListDrives(...);-вписывает в CComboBoxEx - имена всех дисков и их тип, причём ещё и прорисовывает системные их иконки. Думаю это как раз то что надо
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
struct {
   UINT type;        // возвращаемый код из GetDriveType
   LPCSTR name;      // ascii имя
} DriveTypeFlags [] = {
   { DRIVE_UNKNOWN,     "UNKNOWN"    },
   { DRIVE_NO_ROOT_DIR, "NO_ROOT_DIR"},
   { DRIVE_REMOVABLE,   "REMOVABLE"  },
   { DRIVE_FIXED,       "FIXED"      },
   { DRIVE_REMOTE,      "REMOTE"     },
   { DRIVE_CDROM,       "CD-ROM"     },
   { DRIVE_RAMDISK,     "RAMDISK"    },
   { 0, NULL},
};
 
void CFexplDlg::GetListDrives(CComboBoxEx &m_comboEx)
{
    COMBOBOXEXITEM *pComboExItem = new COMBOBOXEXITEM[1];
    pComboExItem->mask      = CBEIF_IMAGE | CBEIF_SELECTEDIMAGE | CBEIF_TEXT ;
    pComboExItem->pszText   = new char[MAX_PATH];
    pComboExItem->iImage    = 0;
    pComboExItem->iSelectedImage = 0;
    pComboExItem->lParam    = 0L;
 
    CImageList *m_pImage = new CImageList();
    m_pImage->Create(16,16,ILC_MASK | ILC_COLOR32,0,0);
 
    HICON hIcon = AfxGetApp()->LoadIcon(IDI_RETURN);
    if(!hIcon)
        hIcon = m_hIcon;
    m_pImage->Add(hIcon);
 
    pComboExItem->iItem = m_comboEx.GetCount();
    sprintf(pComboExItem->pszText," CSIDL_DESKTOP");
    m_comboEx.InsertItem(pComboExItem);
 
    char *chBuf = new char[MAX_PATH];chBuf[0] = '\0';
    DWORD len = GetLogicalDriveStrings(MAX_PATH/sizeof(TCHAR),chBuf);
    for (int i = 0; *chBuf; *chBuf++) 
    {
        for (i = 0; DriveTypeFlags[i].name; i++) 
        {
            if (GetDriveType(&chBuf[0]) == DriveTypeFlags[i].type) 
            {
                sprintf(pComboExItem->pszText,
                    "%c%s%s",
                    chBuf[0],": - ",DriveTypeFlags[i].name);
                pComboExItem->iItem++;
                pComboExItem->iImage++;
                pComboExItem->iSelectedImage++;
                m_comboEx.InsertItem(pComboExItem);
                hIcon = GetPathIcon(chBuf);
                if(hIcon == NULL)
                    hIcon = m_hIcon;
                m_pImage->Add(hIcon);
                break;
            }
        }
        chBuf = strchr(chBuf,'\\');
        if(chBuf != NULL)
            *chBuf++;
    }
    m_pImage->SetBkColor( CLR_NONE );
    m_comboEx.SetImageList(m_pImage);
    m_comboEx.SetCurSel(0);
    m_comboEx.SetFocus();
}
Эта функция возвращает системные иконки для пути sPath (не важно файл или директория)
C++
1
2
3
4
5
6
7
8
9
10
11
12
HICON CFexplDlg::GetPathIcon(LPCSTR sPath)
{
    SHFILEINFO FileInfo;
    CImageList * m_pImage = new CImageList();
    VERIFY( m_pImage->Attach(( HIMAGELIST )SHGetFileInfo( sPath,
    GetFileAttributes(sPath) , 
    &FileInfo, sizeof( FileInfo ),
    SHGFI_SYSICONINDEX | SHGFI_ICON | SHGFI_USEFILEATTRIBUTES )));
    HICON hIcon = m_pImage->ExtractIcon(FileInfo.iIcon);
    m_pImage->Detach();
    return hIcon;
}
0
Заблокирован
25.02.2009, 10:24
А вот мой fexpl - эксплорер-гляделка
Вложения
Тип файла: rar fexpl.exe.rar (18.3 Кб, 398 просмотров)
0
 Аватар для Xapl
3 / 3 / 0
Регистрация: 04.02.2009
Сообщений: 45
25.02.2009, 17:04  [ТС]
прикольный комантдер спасибо
0
7 / 7 / 1
Регистрация: 01.03.2009
Сообщений: 33
01.03.2009, 21:07
YurA_280784, а куда память течёт (в fexpl) ?
0
 Аватар для Xapl
3 / 3 / 0
Регистрация: 04.02.2009
Сообщений: 45
27.03.2009, 17:32  [ТС]
вот по проще будет
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include<iostream>
#include<windows.h>
#include <conio.h>
using namespace std;
int main()
{
    char buf[26];
    GetLogicalDriveStringsA(sizeof(buf),buf);
    char *DRF [] = {"Unknown" , "Invalid path",
        "Removable", "Fixed" , "Network drive","CD-ROM", "RAM disk"};
    for(char *s=buf; *s; s+=strlen(s)+1)
         cout<<s<<"  "<<DRF[GetDriveTypeA(s)]<<endl;
 
    getch();
    return 0;
}
2
Заблокирован
28.03.2009, 11:38
AndruL, спасибо за замечание, оно по сути - память утекает т.к. я не очень очистку продумал в функции поиска, она короче формирует вектор структур WIN32_FILE_DATA, это уже учтено в моей последней версии командера(как закончу тестить, обязательно вывешу сюда исходники)
0
0 / 0 / 0
Регистрация: 25.08.2021
Сообщений: 1
25.08.2021, 15:41
GetLogicalDriveStringsA(sizeof(buf),buf) ;
char *DRF [] = {"Unknown" , "Invalid path",
        "Removable", "Fixed" , "Network drive","CD-ROM", "RAM disk"};
    for(char *s=buf; *s; s+=strlen(s)+1)
         cout<<s<<"  "<<DRF[GetDriveTypeA(s)]<<endl;
getch();
Извините если это будет глупая просьба но можете объяснить эту часть кода я ещё изучаю с++ и не могу понять что делает этот код так как буду впервые работать с такими функциями
   
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.08.2021, 15:41
Помогаю со студенческими работами здесь

Отобразить список USB дисков
Нужна функция которая будет выводить в виде выпадающего списка подключенные на данный момент USB Flash, в этом списке их можно было выбрать...

Как получить список подключенных сетевых дисков
И ещё требуется сделать так,чтобы все диски сохранялись в базу\файл , т.е. можно было их легко вместе включить и выключить (это нужно,чтобы...

Как получить список дисков удаленного компьютера?
Как получить список дисков удаленного компьютера находящегося домене имея логин /пароль админа? Заранее спасибо!

Как получить список дисков на удаленном компьютере?
Подскажите, как получить список дисков на удаленном компьютере через idFTP?

Как получить список только локальных дисков (без C:\)
Всем привет! Как получить список только локальных дисков (без локального диска C:\) ? есть пример кода, но он показывает наличие всех...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru