GetVolumeInformation 関数を使用すると、ボリュームの名前、ボリュームのシリアル番号、ファイル名の最大の長さ、ファイルシステム名を取得できます。
1番目の引数にルートディレクトリ名を指定すると、そのドライブの情報を取得することができます。
GetDiskFreeSpaceEx 関数を使用すると、ディスク全体のバイト数とディスク全体の空きバイト数を取得できます。
1番目の引数にディスクのディレクトリ名を指定します。
#include <tchar.h>
#include <iostream>
#include <locale>
#include <Windows.h>
//---------------------------------------------------------------------------
#pragma argsused
int _tmain(int argc, _TCHAR* argv[])
{
TCHAR rootPathName[4] = _T("C:\");
TCHAR volumeNameBuffer[MAX_PATH+1];
DWORD volumeNameSize = MAX_PATH+1;
DWORD volumeSerialNumber;
DWORD maximumComponentLength;
DWORD fileSystemFlags;
TCHAR fileSystemNameBuffer[MAX_PATH+1];
DWORD fileSystemNameSize = MAX_PATH + 1;
if (GetVolumeInformation(
rootPathName,
volumeNameBuffer,
volumeNameSize,
&volumeSerialNumber,
&maximumComponentLength,
&fileSystemFlags,
fileSystemNameBuffer,
fileSystemNameSize) != 0) {
std::locale::global(std::locale("japanese"));
std::wcout << L"ボリュームの名前 " << volumeNameBuffer << std::endl;
std::wcout << L"ボリュームのシリアル番号 " << volumeSerialNumber << std::endl;
std::wcout << L"ファイル名の最大の長さ " << maximumComponentLength << std::endl;
std::wcout << L"ファイルシステム名 " << fileSystemNameBuffer << std::endl;
} else {
//エラー
std::cout << "GetVolumeInformation error" << std::endl;
}
ULARGE_INTEGER freeBytesAvailable, totalNumberOfBytes, totalNumberOfFreeBytes;
if (GetDiskFreeSpaceEx(
rootPathName,
&freeBytesAvailable,
&totalNumberOfBytes,
&totalNumberOfFreeBytes) != 0) {
std::wcout << L"ディスク全体のバイト数 " << totalNumberOfBytes.QuadPart << std::endl;
std::wcout << L"ディスク全体の空きバイト数 " << totalNumberOfFreeBytes.QuadPart << std::endl;
} else {
//エラー
std::cout << "GetDiskFreeSpaceEx error" << std::endl;
}
return 0;
}