Форум программистов, компьютерный форум, киберфорум
Наши страницы
Visual C++
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.57/21: Рейтинг темы: голосов - 21, средняя оценка - 4.57
Дашустрик
Дашики
7 / 7 / 1
Регистрация: 26.09.2008
Сообщений: 477
1

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

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

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

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

Windows 7 не видит логические диски
На новый компьютер оставил старый диск который использовался как...

Разбить диск на логические диски в Windows 7
Здравствуйте! Поясните пожалуйста как правильно разбить диск 1Тб? Логический...

Операционной системе Windows исполнилось 25 лет
Ровно 25 лет назад, 20 ноября 1985 года, вышла первая версия операционной...

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

Ноутбук Lenovo с windows 8, как разделить диск С на логические диски?
купила ноутбук Lenovo с windows 8, хочу разделить диск С, чтобы отдельно...

27
Vourhey
Почетный модератор
6493 / 2268 / 185
Регистрация: 29.07.2006
Сообщений: 12,534
16.03.2009, 20:34 2
функция винапи - GetVolumeINformation
0
Дашустрик
Дашики
7 / 7 / 1
Регистрация: 26.09.2008
Сообщений: 477
29.04.2009, 20:05  [ТС] 3
можете подсказать по этой теме какую-нибудь хорошую книгу?
0
Vourhey
Почетный модератор
6493 / 2268 / 185
Регистрация: 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 / 1
Регистрация: 26.09.2008
Сообщений: 477
29.04.2009, 20:08  [ТС] 5
спс
0
Vourhey
Почетный модератор
6493 / 2268 / 185
Регистрация: 29.07.2006
Сообщений: 12,534
29.04.2009, 20:09 6
лдпр
0
Дашустрик
Дашики
7 / 7 / 1
Регистрация: 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
Эксперт С++
2313 / 1686 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
30.04.2009, 13:10 10
Дашустрик,
Старайся найти ответ на вопрос самостоятельно (гуглом, мозгом, методом проб и ошибок), а только потом обращаться за помощью.
Тебе же самой проще будет, если решение задачи будешь зависеть только от тебя, а не от кого-то еще.
А то ты, по-моему, даже не стараешься найти ответ самостоятельно.
0
Дашустрик
Дашики
7 / 7 / 1
Регистрация: 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 / 0
Регистрация: 30.03.2009
Сообщений: 766
05.05.2009, 00:09 12
нельзя объявлять функцию внутри функции, как у тебя в 65 (63) строке кода
0
Дашустрик
Дашики
7 / 7 / 1
Регистрация: 26.09.2008
Сообщений: 477
05.05.2009, 01:19  [ТС] 13
Цитата Сообщение от Lolcht0 Посмотреть сообщение
нельзя объявлять функцию внутри функции, как у тебя в 65 (63) строке кода
а как это исправить?
0
Rififi
2363 / 1056 / 104
Регистрация: 03.05.2009
Сообщений: 2,656
05.05.2009, 01:34 14
Дашустрик,
если не напарила, то ты вроде говорила что составила программу, а потом ещё еще и исправляла.
так в чём проблема? просто убираешь локальную функцию.
0
Дашустрик
Дашики
7 / 7 / 1
Регистрация: 26.09.2008
Сообщений: 477
05.05.2009, 09:25  [ТС] 15
Цитата Сообщение от Rififi Посмотреть сообщение
Дашустрик,
если не напарила, то ты вроде говорила что составила программу, а потом ещё еще и исправляла.
так в чём проблема? просто убираешь локальную функцию.
я подправила,а не исправила,я добавила ещё одну функцию по условию

Добавлено через 1 минуту 14 секунд
убирала-не помагает
0
Alexiski
Любитель давать советы
341 / 133 / 14
Регистрация: 12.01.2009
Сообщений: 511
05.05.2009, 10:26 16
Надо, чтобы новая функция была не внутри функции main, а перед нею.
Для этого надо просто перенести строчки 63-109 (по приведенному листингу) перед строчкой 28
0
Дашустрик
Дашики
7 / 7 / 1
Регистрация: 26.09.2008
Сообщений: 477
05.05.2009, 19:23  [ТС] 17
Цитата Сообщение от Alexiski Посмотреть сообщение
Надо, чтобы новая функция была не внутри функции main, а перед нею.
Для этого надо просто перенести строчки 63-109 (по приведенному листингу) перед строчкой 28
сделала,вот:
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},
};
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;
};
//////////////////
// Стандартная функция 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();
 
Sleep(2000);
return 0;
}
теперь у меня 2 ошибки:
C:\Documents and Settings\Дашустрик\Рабочий стол\Систематичное программирование\3\3.cpp(31) : error C2065: 'SYSTEM_PROCESS_INFORMATION' : undeclared identifier
C:\Documents and Settings\Дашустрик\Рабочий стол\Систематичное программирование\3\3.cpp(31) : error C2144: syntax error : missing ';' before type 'char'

Добавлено через 8 часов 11 минут 37 секунд
где найти мне Winternl.h??
0
Alexiski
Любитель давать советы
341 / 133 / 14
Регистрация: 12.01.2009
Сообщений: 511
05.05.2009, 20:35 18
По-моему, в этом коде SYSTEM_PROCESS_INFORMATION можно просто закомментировать.

Сейчас проверил - вроде, работает. Только вызов этой самой функции GetVolumeInfo надо будет добавить в районе строки 106 примерно так:
C++
1
2
3
4
char* sVolInfo = VolumeInfo(sDrivePath);
msg += sVolInfo;
delete[] sVolInfo;
msg += '\n';
0
БурундукЪ
9557 / 2560 / 83
Регистрация: 17.02.2009
Сообщений: 10,364
05.05.2009, 20:39 19
Цитата Сообщение от Дашустрик Посмотреть сообщение
где найти мне Winternl.h??
в гугле ))))
первая сцыла
приведет сюда

Не по теме:

ДП )))

0
Дашустрик
Дашики
7 / 7 / 1
Регистрация: 26.09.2008
Сообщений: 477
05.05.2009, 20:42  [ТС] 20
Цитата Сообщение от Alexiski Посмотреть сообщение
По-моему, в этом коде SYSTEM_PROCESS_INFORMATION можно просто закомментировать.
что это значит?
0
05.05.2009, 20:42
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.05.2009, 20:42

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

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

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


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

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

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