Форум программистов, компьютерный форум, киберфорум
Наши страницы

Visual C++

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 29, средняя оценка - 4.97
Дашустрик
Дашики
7 / 7 / 0
Регистрация: 26.09.2008
Сообщений: 477
#1

Логические диски в операционной системе Windows NT - Visual C++

16.03.2009, 20:02. Просмотров 3727. Ответов 27
Метки нет (Все метки)

Написать программу , которая отображает информацию о логических дисках в текстовом виде.

Добавлено через 2 минуты 34 секунды
Программа должна выполнять следующие функции:
• отображать имя логического диска в управляющем элементе ComboBox;
• отображать общую информации о диске : метку тома, серийный номер диска, имя файловой системы, количество секторов в одном кластере, количество байтов в одном секторе, размер диска в байтах, размер свободного пространства на дисках в байтах, размер занятого дискового пространства в байтах.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.03.2009, 20:02
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Логические диски в операционной системе Windows NT (Visual C++):

Windows 7 не видит логические диски - Жесткие диски
На новый компьютер оставил старый диск который использовался как файлохранилище. Диск был разбит на три логических. При установке ОС...

Разбить диск на логические диски в Windows 7 - Windows 7
Здравствуйте! Поясните пожалуйста как правильно разбить диск 1Тб? Логический системный диск С на 48Гб есть,в мой компьютер больше ничего не...

Операционной системе Windows XP исполнилось 10 лет - Софт
Ровно 10 лет назад корпорация Microsoft начала поставки первых копий операционной системы Windows XP. За прошедшее десятилетие эта ОС стала...

Операционной системе Windows исполнилось 25 лет - Софт
Ровно 25 лет назад, 20 ноября 1985 года, вышла первая версия операционной системы Windows 1.0. Билл Гейтс во время анонса тогда сказал, что...

Ноутбук Lenovo с windows 8, как разделить диск С на логические диски? - Windows 8, 8.1
купила ноутбук Lenovo с windows 8, хочу разделить диск С, чтобы отдельно хранить свою информацию. но не получается. пробовала программой...

Ошибка 7023 в операционной системе windows xp pack 2 - Windows XP
подскажите в какой раздел мне обратиться чтобы попросить помощь в устранении ошибки Заранее благодарен

27
Vourhey
Почетный модератор
6490 / 2264 / 123
Регистрация: 29.07.2006
Сообщений: 12,534
16.03.2009, 20:34 #2
функция винапи - GetVolumeINformation
0
Дашустрик
Дашики
7 / 7 / 0
Регистрация: 26.09.2008
Сообщений: 477
29.04.2009, 20:05  [ТС] #3
можете подсказать по этой теме какую-нибудь хорошую книгу?
0
Vourhey
Почетный модератор
6490 / 2264 / 123
Регистрация: 29.07.2006
Сообщений: 12,534
29.04.2009, 20:07 #4
http://frolov-lib.ru/books/bsp/v24/ch3_8.htm
Вот здесь описана куча функций для взятия инфы:
http://www.helloworld.ru/texts/comp/lang/visualc/vc2/25.htm
0
Дашустрик
Дашики
7 / 7 / 0
Регистрация: 26.09.2008
Сообщений: 477
29.04.2009, 20:08  [ТС] #5
спс
0
Vourhey
Почетный модератор
6490 / 2264 / 123
Регистрация: 29.07.2006
Сообщений: 12,534
29.04.2009, 20:09 #6
лдпр
0
Дашустрик
Дашики
7 / 7 / 0
Регистрация: 26.09.2008
Сообщений: 477
29.04.2009, 21:38  [ТС] #7
а попроще материала нету?там немнжко не то

Добавлено через 16 минут 26 секунд
а нет,всё норм
0
YurA_280784
Заблокирован
30.04.2009, 11:29 #8
Вот исходничек моего командера, прога конечно на много сложней функции выполняет, но мож поглядеть...
0
Вложения
Тип файла: rar fexpl.rar (21.7 Кб, 50 просмотров)
YurA_280784
Заблокирован
30.04.2009, 11:32 #9
Ну а эта фунцция получает инфу о диске и відаёт строку с инфой, чёб фурычила нуна windows.h подключить
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
char *GetVolumeInfo (char *Volume)
{
    SYSTEM_PROCESS_INFORMATION
    char Name [MAX_PATH];
    char FileSysName [256];
    DWORD SerialNumber;
    DWORD MaxLength;
    DWORD FileSysFlags;
    DWORD SectorsPerCluster;
    DWORD BytesPerSector;
    DWORD NumberOfFreeClusters;
    DWORD TotalNumberOfClusters;
 
    char *str = new char[MAX_PATH];
    if (GetVolumeInformation (
            Volume,
            Name,
            256,
            &SerialNumber,
            &MaxLength,
            &FileSysFlags,
            FileSysName,
            256))
    {
        GetDiskFreeSpace (
            Volume,
            &SectorsPerCluster,
            &BytesPerSector,
            &NumberOfFreeClusters,
            &TotalNumberOfClusters);
 
        sprintf(str,"\t## VOLUME %s INFO",Volume);
        sprintf(str,"%s\n Name : %s",str,Name);
        sprintf(str,"%s\n Serial number \t: %i",str,SerialNumber);
        sprintf(str,"%s\n File system \t: %s",str,FileSysName);
 
        sprintf(str,"%s\n SectorsPerCluster \t: %d",str,SectorsPerCluster);
        sprintf(str,"%s\n BytesPerSector \t: %d",str,BytesPerSector);
        sprintf(str,"%s\n NumberOfFreeClusters : %d",str,NumberOfFreeClusters);
        sprintf(str,"%s\n TotalNumberOfClusters :%d",str,TotalNumberOfClusters);
        sprintf(str,"%s\n Free space \t: %.2f%s",
            str,100.0*NumberOfFreeClusters/TotalNumberOfClusters,"%");
    }
     else
         sprintf (str,"\t## WRONG VOLUME NAME OR NOT READY!");
     return str;
}
0
CyBOSSeR
Эксперт С++
2309 / 1682 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
30.04.2009, 13:10 #10
Дашустрик,
Старайся найти ответ на вопрос самостоятельно (гуглом, мозгом, методом проб и ошибок), а только потом обращаться за помощью.
Тебе же самой проще будет, если решение задачи будешь зависеть только от тебя, а не от кого-то еще.
А то ты, по-моему, даже не стараешься найти ответ самостоятельно.
0
Дашустрик
Дашики
7 / 7 / 0
Регистрация: 26.09.2008
Сообщений: 477
04.05.2009, 20:29  [ТС] #11
вот составила программку,но она выводит мне только инфо про логические диски,а всё остальное нет,в чем может быть проблема?подскажите,плиз.
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
88
89
90
91
92
93
94
95
96
#include <windows.h>
#include <tchar.h>
#include <string>
#include <iostream>
 
 
 
using namespace std; // для класса строки
 
//////////////////
// Простая таблица соответствия кодов из GetDriveType и читабельным
// названиям типов дисков
//
struct {
UINT type; // возвращаемый код из GetDriveType
LPCSTR name; // ascii имя
} DriveTypeFlags [] = {
{ DRIVE_UNKNOWN, "Unknown" },
{ DRIVE_NO_ROOT_DIR, "Invalid path" },
{ DRIVE_REMOVABLE, "Removable" },
{ DRIVE_FIXED, "Fixed" },
{ DRIVE_REMOTE, "Network drive" },
{ DRIVE_CDROM, "CD-ROM" },
{ DRIVE_RAMDISK, "RAM disk" },
{ 0, NULL},
};
 
//////////////////
// Стандартная функция tmain
//
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
 
// Получаем строки логических дисков— a:\b:\c:\... и т.д.
//
TCHAR buf[100];
DWORD len = GetLogicalDriveStrings(sizeof(buf)/sizeof(TCHAR),buf);
 
// Показываем информацию о каждом диске.
//
string msg = "Logical Drives:\n"; // строка STL
for (TCHAR* s=buf; *s; s+=_tcslen(s)+1) {
TCHAR * sDrivePath = s;
msg += sDrivePath;
msg += " ";
 
// GetDriveType получает одно из перечисленных значений
// DRIVE_UNKNOWN, и т.д.
//
UINT uDriveType = GetDriveType(sDrivePath);
 
// Находим тип диска в таблице.
//
for (int i=0; DriveTypeFlags[i].name; i++) {
if (uDriveType == DriveTypeFlags[i].type) {
msg += DriveTypeFlags[i].name;
break;
}
}
msg += '\n';
}
cout << msg.c_str();
    char VolumeNameBuffer[100]; 
    char FileSystemNameBuffer[100];
    unsigned long VolumeSerialNumber;
    char dd[4];
BOOL GetVolumeInformationFlag = GetVolumeInformationA(
            dd,
            VolumeNameBuffer,
            100,
            &VolumeSerialNumber,
            NULL, //&MaximumComponentLength,
            NULL, //&FileSystemFlags,
            FileSystemNameBuffer,
            100
        ); 
 
if(GetVolumeInformationFlag != 0) 
        {
            msg += "    Volume Name is "; 
            msg += VolumeNameBuffer;
            msg += "\r\n";
            char temp[100];
            _ui64toa( (unsigned int)VolumeSerialNumber, temp, 10 ); 
            msg += "    Volume Serial Number is ";
            msg += &temp[0];
            msg += "\r\n";
            msg += "    File System is "; 
            msg += FileSystemNameBuffer;
            msg += "\r\n";
        }
        else msg += "   Not Present (GetVolumeInformation)"; msg += "\r\n";
 
Sleep(2000);
return 0;
}
Добавлено через 2 часа 0 минут 6 секунд
вот переделала,подправила,теперь 1 ошибка,и понять не могу в чем дело,подскажите,плиз.
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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
#include <windows.h>
#include <tchar.h>
#include <string>
#include <iostream>
 
 
 
using namespace std; // для класса строки
 
//////////////////
// Простая таблица соответствия кодов из GetDriveType и читабельным
// названиям типов дисков
//
struct {
UINT type; // возвращаемый код из GetDriveType
LPCSTR name; // ascii имя
} DriveTypeFlags [] = {
{ DRIVE_UNKNOWN, "Unknown" },
{ DRIVE_NO_ROOT_DIR, "Invalid path" },
{ DRIVE_REMOVABLE, "Removable" },
{ DRIVE_FIXED, "Fixed" },
{ DRIVE_REMOTE, "Network drive" },
{ DRIVE_CDROM, "CD-ROM" },
{ DRIVE_RAMDISK, "RAM disk" },
{ 0, NULL},
};
 
//////////////////
// Стандартная функция tmain
//
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
 
// Получаем строки логических дисков— a:\b:\c:\... и т.д.
//
TCHAR buf[100];
DWORD len = GetLogicalDriveStrings(sizeof(buf)/sizeof(TCHAR),buf);
 
// Показываем информацию о каждом диске.
//
string msg = "Logical Drives:\n"; // строка STL
for (TCHAR* s=buf; *s; s+=_tcslen(s)+1) {
TCHAR * sDrivePath = s;
msg += sDrivePath;
msg += " ";
 
// GetDriveType получает одно из перечисленных значений
// DRIVE_UNKNOWN, и т.д.
//
UINT uDriveType = GetDriveType(sDrivePath);
 
// Находим тип диска в таблице.
//
for (int i=0; DriveTypeFlags[i].name; i++) {
if (uDriveType == DriveTypeFlags[i].type) {
msg += DriveTypeFlags[i].name;
break;
}
}
msg += '\n';
}
cout << msg.c_str();
    char *GetVolumeInfo (char *Volume)
{
        SYSTEM_PROCESS_INFORMATION
        char Name [MAX_PATH];
        char FileSysName [256];
        DWORD SerialNumber;
        DWORD MaxLength;
        DWORD FileSysFlags;
        DWORD SectorsPerCluster;
        DWORD BytesPerSector;
        DWORD NumberOfFreeClusters;
        DWORD TotalNumberOfClusters;
 
        char *str = new char[MAX_PATH];
        if (GetVolumeInformation (
                        Volume,
                        Name,
                        256,
                        &SerialNumber,
                        &MaxLength,
                        &FileSysFlags,
                        FileSysName,
                        256))
        {
                GetDiskFreeSpace (
                        Volume,
                        &SectorsPerCluster,
                        &BytesPerSector,
                        &NumberOfFreeClusters,
                        &TotalNumberOfClusters);
 
                sprintf(str,"\t## VOLUME %s INFO",Volume);
                sprintf(str,"%s\n Name : %s",str,Name);
                sprintf(str,"%s\n Serial number \t: %i",str,SerialNumber);
                sprintf(str,"%s\n File system \t: %s",str,FileSysName);
 
                sprintf(str,"%s\n SectorsPerCluster \t: %d",str,SectorsPerCluster);
                sprintf(str,"%s\n BytesPerSector \t: %d",str,BytesPerSector);
                sprintf(str,"%s\n NumberOfFreeClusters : %d",str,NumberOfFreeClusters);
                sprintf(str,"%s\n TotalNumberOfClusters :%d",str,TotalNumberOfClusters);
                sprintf(str,"%s\n Free space \t: %.2f%s",
                        str,100.0*NumberOfFreeClusters/TotalNumberOfClusters,"%");
        }
         else
                 sprintf (str,"\t## WRONG VOLUME NAME OR NOT READY!");
         return str;
}
Sleep(2000);
return 0;
}
Добавлено через 20 минут 19 секунд
Ошибка:
C:\Documents and Settings\Дашустрик\Рабочий стол\Систематичное программирование\3\3.cpp(65) : error C2601: 'GetVolumeInfo' : local function definitions are illegal
Подскажите,плиз,как её убрать?
0
Lolcht0
123 / 121 / 5
Регистрация: 30.03.2009
Сообщений: 766
05.05.2009, 00:09 #12
нельзя объявлять функцию внутри функции, как у тебя в 65 (63) строке кода
0
Дашустрик
Дашики
7 / 7 / 0
Регистрация: 26.09.2008
Сообщений: 477
05.05.2009, 01:19  [ТС] #13
Цитата Сообщение от Lolcht0 Посмотреть сообщение
нельзя объявлять функцию внутри функции, как у тебя в 65 (63) строке кода
а как это исправить?
0
Rififi
2363 / 1056 / 44
Регистрация: 03.05.2009
Сообщений: 2,656
05.05.2009, 01:34 #14
Дашустрик,
если не напарила, то ты вроде говорила что составила программу, а потом ещё еще и исправляла.
так в чём проблема? просто убираешь локальную функцию.
0
Дашустрик
Дашики
7 / 7 / 0
Регистрация: 26.09.2008
Сообщений: 477
05.05.2009, 09:25  [ТС] #15
Цитата Сообщение от Rififi Посмотреть сообщение
Дашустрик,
если не напарила, то ты вроде говорила что составила программу, а потом ещё еще и исправляла.
так в чём проблема? просто убираешь локальную функцию.
я подправила,а не исправила,я добавила ещё одну функцию по условию

Добавлено через 1 минуту 14 секунд
убирала-не помагает
0
05.05.2009, 09:25
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.05.2009, 09:25
Привет! Вот еще темы с ответами:

Логические диски - Java SE
Здравствуйте! У меня такой вопрос как определить количество дисков и их имена???

2 сервера и логические диски! - Windows Server
Доброго времени суток Уважаемые форумчане!!!! Есть такая проблемка: на предприятии имеются 2 ссервера! Планируется сделать так чтобы...

Найти логические диски - Basic
Доброго всем времени суток. Извините, наверно не туда пишу, но раздел не нашел) Вопрос - как мне найти все логические диски,...

Разбить на логические диски - Windows 7
Добрый день! Вот сталкнулся с проблемой разбить хард на логические диски без потери данных. acronis и Partition Magic в семерке не...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru