#include <windows.h>
#include <winbase.h>
#include <iostream.h>
#include <iomanip.h>
#include <string.h>
void fmtnumber(__int64 Number, char FmtNumber[]);
void fmtsize( __int64 Number, double & Size, char Units[3]);
void main()
{
BOOL success;
LPCTSTR DiskDirectory = "C:\\"; // directory name
__int64 AvailableBytes; // number of bytes on disk available to the caller
__int64 TotalBytes; // number of bytes on disk
__int64 FreeBytes; // free bytes on disk
DWORD SectorsPerCluster=0; // pointer to sectors per cluster
DWORD BytesPerSector=0; // pointer to bytes per sector
DWORD FreeClusters=0; // pointer to number of free clusters
DWORD TotalClusters=0; // pointer to total number of clusters
char FmtNumber[20];
double Size;
char Units[3];
success = GetDiskFreeSpaceEx(DiskDirectory, (PULARGE_INTEGER) &AvailableBytes,
(PULARGE_INTEGER) &TotalBytes, (PULARGE_INTEGER) &FreeBytes);
if (!success)
{
success = GetDiskFreeSpace(DiskDirectory, &SectorsPerCluster,
&BytesPerSector, &FreeClusters, &TotalClusters);
FreeBytes = FreeClusters * SectorsPerCluster * BytesPerSector;
TotalBytes = TotalClusters * SectorsPerCluster * BytesPerSector;
}
if (success)
{
cout.flags(ios::fixed);
cout << setprecision(2);
fmtnumber(TotalBytes - FreeBytes, FmtNumber);
fmtsize(TotalBytes - FreeBytes, Size, Units);
cout << "Used space: " << setw(15) << FmtNumber << " bytes";
cout << setw(8) << Size << setw(3) << Units << endl;
cout << setprecision(1);
fmtnumber(FreeBytes, FmtNumber);
fmtsize(FreeBytes, Size, Units);
cout << "Free space: " << setw(15) << FmtNumber << " bytes";
cout << setw(8) << Size << setw(3) << Units << endl;
fmtnumber(TotalBytes, FmtNumber);
fmtsize(TotalBytes, Size, Units);
cout << "Capacity: " << setw(15) << FmtNumber << " bytes";
cout << setw(8) << Size << setw(3) << Units << endl;
}
cout << Size << endl;
}
void fmtnumber( __int64 Number, char FmtNumber[])
{
const int LBUF = 14;
const int LFMT = 17;
char buffer[LBUF], fmtbuffer[LFMT];
_i64toa(Number, buffer, 10);
int l = strlen(buffer) - 1;
int n=0;
int icount=0;
int i;
for(i=l;i>=0;i--)
{
if (icount==3)
{
fmtbuffer[n]=',';
icount=0;
n++;
}
fmtbuffer[n]=buffer;
icount++;
n++;
}
fmtbuffer[n]=0;
strcpy(FmtNumber, _strrev(fmtbuffer));
}
void fmtsize( __int64 Number, double & Size, char Units[3])
{
const int KB = 1024;
const int MB = KB*KB;
const int GB = KB*MB;
double DIV;
if (Number>GB)
{
DIV = double(GB);
strcpy(Units,"GB");
}
else if (Number>MB)
{
DIV = double(MB);
strcpy(Units,"MB");
}
else
{
DIV = double(KB);
strcpy(Units,"KB");
}
Size = Number / DIV;
}
Другие языки программирования и технологии
определение объема жесткого диска на C++. просьба написать кусок кода. функцию
ULARGE_INTEGER TotalBytes;
printf("TotalBytes = %I64u\n", TotalBytes.QuadPart);
printf("TotalBytes = %I64u\n", TotalBytes.QuadPart);
DWORD dwSektorov_v_klastere;
DWORD dwBaitov_v_Sektore;
DWORD dwSvobodnih_Klasterov;
DWORD dwVsego_KLasterov;
GetDiskFreeSpace("C:\\",
&dwSektorov_v_klastere,
&dwBaitov_v_Sektore,&dwSvobodnih_Klasterov,
&dwVsego_KLasterov);
DWORD x = dwSvobodnih_Klasterov*dwSektorov_v_klastere/1024;
x=x*dwBaitov_v_Sektore/1024;
x - свободное место в мегобайтах...
DWORD dwBaitov_v_Sektore;
DWORD dwSvobodnih_Klasterov;
DWORD dwVsego_KLasterov;
GetDiskFreeSpace("C:\\",
&dwSektorov_v_klastere,
&dwBaitov_v_Sektore,&dwSvobodnih_Klasterov,
&dwVsego_KLasterov);
DWORD x = dwSvobodnih_Klasterov*dwSektorov_v_klastere/1024;
x=x*dwBaitov_v_Sektore/1024;
x - свободное место в мегобайтах...
Похожие вопросы
- Увеличение объема жесткого диска Имеется жесткий диск разделенный на 3 диска.. . В связи нехваткой места нужно увеличить
- Необходимо написать кусок кода, который формирует новый массив из исходного.
- Как розделять Жесткий Диск на C и D. и можно ли когда розделён уже добавлять с одного в другой?
- C++ Везде написано, что sizeof() с массивом в качестве аргумента возвращает полный размер. А в данной функции не так.
- C++ Видимо недоделка в коде?
- Как самому восстановить данные с жесткого диска ноутбука?
- не могу загрузить винду-через БИОС--после f10-и ентер--начинает грузиться с жесткого диска-подскажите какая настройка
- возможен ли с помощь акронис 10 версии переместить все содержимое с лок. диска С в более свободное жесткий диск,,,
- Утеряны данные с жёсткого диска.
- Разделы жёсткого диска.Писать по теме и знающим.