Форум программистов, компьютерный форум CyberForum.ru

Системные флаги диска - C++

Восстановить пароль Регистрация
 
Petar07
2 / 2 / 0
Регистрация: 11.10.2012
Сообщений: 93
08.04.2013, 11:46     Системные флаги диска #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
#include <iostream>
#include <stdio.h>
#include <windows.h>
#include <conio.h>
#include <locale>
 
using namespace std;
 
int main()
{
    setlocale (LC_ALL, "RUSSIAN");
     int n;   
     char dd[4];   
     DWORD dr = GetLogicalDrives( );  
     DWORD BytesPerSector;   
     DWORD NumberOfFreeClusters;   
     DWORD TotalNumberOfClusters;   
     DWORD SectorPerCluster;   
     
     
        
     cout << "Доступные диски : " << endl; 
        
        for ( int i = 0; i < 26; i++ )  
        {
           n = ( ( dr >> i ) & 0x00000001 ); 
           if ( n == 1 )  
           {        
              dd[0] = char( 65 + i ); 
              dd[1] = ':';
              dd[2] = '\\';
              dd[3] = '\0';
               GetDiskFreeSpaceA (dd, &BytesPerSector, &SectorPerCluster, &NumberOfFreeClusters, &TotalNumberOfClusters);  
           
           cout << "disk " << dd << endl;
           
           switch ( GetDriveType( dd ) ) 
              {
                 case DRIVE_UNKNOWN:
                    cout << "   Неизвестный носитель. " << endl << "     Количество кластеров " << TotalNumberOfClusters << ". Количество свободных кластеров " << NumberOfFreeClusters << ". Длинна кластера " << SectorPerCluster*BytesPerSector << ". Объем незанятого пространства диска " << (SectorPerCluster*BytesPerSector/1024)*NumberOfFreeClusters/1024 << " МБ " << endl;
                    break;
                 case DRIVE_NO_ROOT_DIR:
                    cout << "   Корневой дирректории не существует" << endl << "     Количество кластеров " << TotalNumberOfClusters << ". Количество свободных кластеров " << NumberOfFreeClusters << ". Длинна кластера " << SectorPerCluster*BytesPerSector << ". Объем незанятого пространства диска " << (SectorPerCluster*BytesPerSector/1024)*NumberOfFreeClusters/1024 << " МБ " << endl;
                    break;
                 case DRIVE_REMOVABLE:
                    cout << "   Сменный диск" << endl << "     Количество кластеров " << TotalNumberOfClusters << ". Количество свободных кластеров " << NumberOfFreeClusters << ". Длинна кластера " << SectorPerCluster*BytesPerSector << ". Объем незанятого пространства диска " << (SectorPerCluster*BytesPerSector/1024)*NumberOfFreeClusters/1024 << " МБ " << endl;
                    break;
                 case DRIVE_FIXED:
                    cout << "   Жесткий диск"  << endl << "     Количество кластеров " << TotalNumberOfClusters << ". Количество свободных кластеров " << NumberOfFreeClusters << ". Длинна кластера " << SectorPerCluster*BytesPerSector << ". Объем незанятого пространства диска " << (SectorPerCluster*BytesPerSector/1024)*NumberOfFreeClusters/1024 << " МБ " << endl;
                    break;
                 case DRIVE_REMOTE:
                    cout << "   Сетевой диск" << endl << "     Количество кластеров " << TotalNumberOfClusters << ". Количество свободных кластеров " << NumberOfFreeClusters << ". Длинна кластера " << SectorPerCluster*BytesPerSector << ". Объем незанятого пространства диска " << (SectorPerCluster*BytesPerSector/1024)*NumberOfFreeClusters/1024 << " МБ " << endl;
                    break;
                 case DRIVE_CDROM:
                    cout << "   Компакт диск(CD или DVD)" << endl << "     Количество кластеров " << TotalNumberOfClusters << ". Количество свободных кластеров " << NumberOfFreeClusters << ". Длинна кластера " << SectorPerCluster*BytesPerSector << ". Объем незанятого пространства диска " << (SectorPerCluster*BytesPerSector/1024)*NumberOfFreeClusters/1024 << " МБ " << endl;
                    break;
                 case DRIVE_RAMDISK:
                    cout << "   RAM-DISK(Эмулированный в ОП диск)" << endl << "     Количество кластеров " << TotalNumberOfClusters << ". Количество свободных кластеров " << NumberOfFreeClusters << ". Длинна кластера " << SectorPerCluster*BytesPerSector << ". Объем незанятого пространства диска " << (SectorPerCluster*BytesPerSector/1024)*NumberOfFreeClusters/1024 << " МБ " << endl;
                    break;
                 default: ;
              }
              
            cout << endl;
            
           }
        }
    
        char VolumeNameBuffer [100];
        char FileSystemNameBuffer [100];
        unsigned long VolumeSerialNumber;
        unsigned long MaximumComponentLength;
        unsigned long FileSystemFlags;
        
        bool GetVolumeInformationFlag = GetVolumeInformationA (dd, VolumeNameBuffer, 100, &VolumeSerialNumber, &MaximumComponentLength, &FileSystemFlags, FileSystemNameBuffer, 100);
        
        if (GetVolumeInformationFlag != 0)
        {
            cout << "Тип файловой системы: " << FileSystemNameBuffer << endl;
            cout << "Системные флаги диска: " << FileSystemFlags << endl;
        }
        else cout << "No present (GetVolumeInformation)" << endl;
 
        int A = GetVolumeInformationA (dd, NULL, NULL, NULL, NULL, &FileSystemFlags, NULL, NULL);
              if (A == FS_CASE_IS_PRESERVED)
                    cout << "При записи на диск сохраняется регистр букв в имени файла" << endl;
              if (A == FS_CASE_SENSITIVE)
                    cout << "Файловая система поддерживает поиск файлов с учетом регистра букв в именах" << endl;
              if (A == FS_UNICODE_STORED_ON_DISK)
                    cout << "Файловая система поддерживает хранение на диске имен фойлов в ЮНИКОД" << endl;
              if (A == FS_PERSISTENT_ACLS)
                    cout << "Файловая система способна оперироватьсо списками контороля доступа" << endl;
              if (A == FS_VOL_IS_COMPRESSED)
                    cout << "Том, информация о котором запрашивется, был подвергнут сжатию" << endl;
              if (A == FS_FILE_COMPRESSION)
                    cout << "Файловая система поддерживает сжатие файлов" << endl;
               
 
 
  
    _getch ();
 
   return 0;
}
Ребят, почему программа не возвращает системные флаги?)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.04.2013, 11:46     Системные флаги диска
Посмотрите здесь:

C++ Флаги форматирования и манипуляторы
Битовые флаги. C++
что такое флаги? C++
C++ Флаги потока cout.
C++ Флаги выравнивания
Пользовательские битовые флаги C++
Не работают флаги C++
Флаги C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 09:52. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru