資源簡介
本項目采用vs2010開發,目的是獲取本地硬盤的個數,硬盤容量,硬盤上的分區,
以及分區的大小和名稱
代碼片段和文件信息
//?MY_Get_Disk_Info.cpp?:?定義控制臺應用程序的入口點。
/************************************************************************/
/*???本項目用來獲取本機上本地硬盤個數,以及容量(名稱可以枚舉設備樹獲得),
?每一塊硬盤上的分區,以及分區名稱及容量。
?當時將硬盤和分區對應時著實花了一些時間。
---by?za
/************************************************************************/
#include?“stdafx.h“
#include?
BOOL IsPartitionOfDisk(int nDiskNum char* strDrive)
{
char cstrDrive[20] =?{0};
HANDLE hPartition =?NULL;
STORAGE_DEVICE_NUMBER storage_device_number;
DWORD dwBytesReturned =?0;
BOOL blErr =?FALSE;
BOOL blPartitionOfDisk =?FALSE;
char strDriveTemp[3] =?{0};
strncpy(strDriveTemp strDrive 2);
sprintf(cstrDrive “\\\\.\\%s“ strDriveTemp);
hPartition = ::CreateFile(
cstrDrive
GENERIC_READ?|?GENERIC_WRITE
FILE_SHARE_READ?|?FILE_SHARE_WRITE
NULLOPEN_EXISTING
FILE_ATTRIBUTE_NORMAL
NULL
);
if?(INVALID_HANDLE_VALUE == hPartition)
{
//打印dbglog日志?打開卷失敗
goto?__exit;
}
blErr = ::DeviceIoControl(
hPartition
IOCTL_STORAGE_GET_DEVICE_NUMBER
NULL
0
&storage_device_number
sizeof(storage_device_number)
&dwBytesReturned
(LPOVERLAPPED)NULL
);
if?(FALSE == blErr || storage_device_number.PartitionNumber?==?-1)
{
//打印dbglog?獲取devicenumer失敗
goto?__exit;
}
if?(nDiskNum == storage_device_number.DeviceNumber)
{
blPartitionOfDisk = TRUE;
}
__exit:
return?blPartitionOfDisk;
}
DWORD GetPartitionSize(char* DirectoryName)
{
ULARGE_INTEGER ulFreeBytesAvailable =?{0};
ULARGE_INTEGER ulTotalNumberOfBytes =?{0};
ULARGE_INTEGER ulTotalNumberOfFreeBytes =?{0};
BOOL blErr =?FALSE;
DWORD dwPartitionSize =?0;
blErr = GetDiskFreeSpaceEx(DirectoryName &ulFreeBytesAvailable &ulTotalNumberOfBytes &ulTotalNumberOfFreeBytes);
if?(FALSE == blErr)
{
//打印dbglog日志?獲取分區大小失敗
goto?__exit;
}
dwPartitionSize = ulTotalNumberOfBytes.QuadPart/(1024*1024*1024);
__exit:
return dwPartitionSize;
}
void GetPartitionsInfoOfDisk(int nDiskNum char* strDrives)
{
char strDriveTem[4] =?{0};
DWORD dwPartitionSize[10] =?{0};
int nPartitionCount =?0;
BOOL blErr =?FALSE;
strcpy(strDriveTem strDrives);
while?(NULL != *strDrives)
{
blErr = IsPartitionOfDisk(nDiskNum strDriveTem);
if?(TRUE == blErr)
{
dwPartitionSize[nPartitionCount] = GetPartitionSize(strDriveTem);
printf(“PartitionName:%s PartitionSize:?%d\n“ strDriveTem dwPartitionSize[nPartitionCount]);
nPartitionCount++;
}
strDrives += 4;
strcpy(strDriveTem strDrives);
}
return;
}
BOOL GetAllLogicalPartitions(char* strDrives int nSize)
{
BOOL blErr =?FALSE;
if?(0?==?::GetLogicalDriveStrings(?nSize?strDrives)?)
{
//打印dbglog日志?獲得邏輯驅動
- 上一篇:微軟編程標準規范(含C++/VC/C#)
- 下一篇:QtWebService開發
評論
共有 條評論