获取磁盘驱动器以及磁盘容量的相关操作
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;
}
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;
}
相关文章推荐
- ES通过脚本获取数组对象,以及Kibana相关操作
- 磁盘检测的作用以及相关操作
- SqlServer如何通过SQL语句获取处理器(CPU)、内存(Memory)、磁盘(Disk)以及操作系统相关信息
- 如何通过css选取元素以及封装了获取,删除css的相关操作
- js Dom节点的获取 以及相关操作
- 获取磁盘相关信息以及网卡相关信息
- SqlServer如何通过SQL语句获取处理器(CPU)、内存(Memory)、磁盘(Disk)以及操作系统相关信息
- 获取与一个磁盘的组织以及剩余空间容量有关的信息以及代码测试
- js-Dom节点的获取-以及相关操作
- Json概述以及python对json的相关操作 分类: python学习 2014-06-23 11:10 188人阅读 评论(0) 收藏
- 二叉树的基本操作以及相关问题的求解—C++实现
- 有向图的十字链表存储表示 以及相关操作(包括增加弧、删除弧、删除顶点等)
- 获取移动设备U盘 的盘符以及容量
- Json概述以及python对json的相关操作
- 文件磁盘相关函数[15]-获取磁盘空间信息 WinAPI:GetDiskFreeSpaceEx;
- Date小技巧:set相关操作及应用_获取当前月(季度/年)的最后一天
- 子页面获取父页面元素并进行相关的操作
- spark 操作hive相关文档以及技术操作网址链接
- DataTable相关操作,筛选,取前N条数据,去重复行,获取指定列数据
- Json概述以及python对json的相关操作