您的位置:首页 > 其它

获取磁盘驱动器以及磁盘容量的相关操作

2011-08-24 19:08 363 查看
其实主要用到的就是以下四个函数:

GetLogicalDriveStrings();

GetDriverType();

GetDiskFreeSpace();

GetDiskFreeSpaceEx();

//如果你想获得硬盘大小,可以参见下面的代码:

DWORD dwTotalDiskSpace,dwFreeDiskSpace,dwUsedDiskSpace;

ULARGE_INTEGER uiFreeBytesAvailableToCaller;

ULARGE_INTEGER uiTotalNumberOfBytes;

ULARGE_INTEGER uiTotalNumberOfFreeBytes;

if(GetDiskFreeSpaceEx(szPath, &uiFreeBytesAvailableToCaller,

&uiTotalNumberOfBytes, &uiTotalNumberOfFreeBytes))

{

dwTotalDiskSpace = (DWORD)(uiTotalNumberOfBytes.QuadPart / 1024 / 1024);

dwFreeDiskSpace = (DWORD)(uiFreeBytesAvailableToCaller.QuadPart >> 20);

dwUsedDiskSpace = dwTotalDiskSpace - dwFreeDiskSpace;

TRACE("硬盘%s::总空间%dMB, 已用%dMB, 可用%dMB\n", szPath,

dwTotalDiskSpace, dwUsedDiskSpace, dwFreeDiskSpace);

}

// 以下求硬盘的剩余空间

DWORD dw=GetLogicalDriveStrings(0,NULL);

LPTSTR pAllDrivers=new char[dw];

::GetLogicalDriveStrings(dw,pAllDrivers);

LPTSTR pDriver=pAllDrivers;

char tempDriver[26];

memset(tempDriver, '\0 ',26);

DWORD DriverNum=0;

unsigned __int64 l_free=0;

while(pDriver[0]!=0)

{

if (GetDriveType(pDriver)==DRIVE_FIXED && GetDriveType(pDriver)!=DRIVE_REMOVABLE)

{

tempDriver[DriverNum++]=*pDriver;

ULARGE_INTEGER i64FreeAmount;

ULARGE_INTEGER i64TotalAmount;

CString ls_drivename=*pDriver;//tempDriver[DriverNum-1]

ls_drivename+=_T( ":\\ ");

::GetDiskFreeSpaceEx(ls_drivename, &i64FreeAmount, &i64TotalAmount, NULL);

//unsigned __int64 l_total=i64TotalAmount.QuadPart;

l_free+=i64FreeAmount.QuadPart;

}

pDriver=_tcschr(pDriver,0)+1;

}

void CDrvSpaceDlg::FindAllDrivers()

{

CComboBox* Driver=(CComboBox*)GetDlgItem(IDC_DRIVER);

DWORD dwNumBytesForDriveStrings;//实际存储驱动器号的字符串长度

HANDLE hHeap;

LPSTR lp;

CString strLogdrive;

//获得实际存储驱动器号的字符串长度

dwNumBytesForDriveStrings=GetLogicalDriveStrings(0,NULL)*sizeof(TCHAR);

//如果字符串不为空,则表示有正常的驱动器存在

if (dwNumBytesForDriveStrings!=0)

{

//分配字符串空间

hHeap=GetProcessHeap();

lp=(LPSTR)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,

dwNumBytesForDriveStrings);

//获得标明所有驱动器的字符串

GetLogicalDriveStrings(HeapSize(hHeap,0,lp),lp);

//将驱动器一个个放到下拉框中

while (*lp!=0)

{

Driver-> AddString(lp);

lp=_tcschr(lp,0)+1;

}

}

else

AfxMessageBox( "Can 't Use The Function GetLogicalDriveStrings! ");

}

ULARGE_INTEGER FreeAv,TotalBytes,FreeBytes;

if(GetDiskFreeSpaceEx(Driver,&FreeAv,&TotalBytes,&FreeBytes))

{

//格式化信息,并显示出来

CString strTotalBytes,strFreeBytes;

strTotalBytes.Format( "%u字节 ",TotalBytes.QuadPart);

strFreeBytes.Format( "%u字节 ",FreeBytes.QuadPart);

}

//得到当前机器硬盘容量

bool GetDiscSpace(HWND hwnd)

{

int DiscType;

char RootPath[] = "_:\\ ";

char buffer[MAX_PATH];

DWORD SectorsPerCluster;

DWORD BytePerSector;

DWORD NumberOfFreeClusters;

DWORD TotalNumberOfClusters;

DWORD FreeSpace;

DWORD TotalSpace;

for(int i=2;i < 'z '- 'a ';i++)

{

RootPath[0] = i+ 'a ';

DiscType = GetDriveType(RootPath);

if(DiscType == DRIVE_FIXED)

{

GetDiskFreeSpace(RootPath,&SectorsPerCluster,&BytePerSector,&NumberOfFreeClusters,&TotalNumberOfClusters);

FreeSpace = SectorsPerCluster * BytePerSector / 1024 * NumberOfFreeClusters / 1024;

TotalSpace = SectorsPerCluster * BytePerSector / 1024 * TotalNumberOfClusters / 1024;

wsprintf(buffer, " %s %8dMB %8dMB ",RootPath,TotalSpace,FreeSpace);

SendMessage(GetDlgItem(hwnd,IDC_LIST),LB_ADDSTRING,NULL,(LPARAM)buffer);

}

}

return false;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: