当前位置: 源码素材网 » VC++教程 » 详情页

VC++ 获取磁盘空间容量大小数据

  •   时间:2019-08-08
  • 概述:磁盘空间 容量 大小

有时候需要知道磁盘的空间状况,比如还剩多少空余空间等,本例就介绍在程序中如何获得磁盘空间资料。编译并运行本例程序,如图所示。通过驱动器列表选择驱动器,然后单击【获得磁盘空间信息】按钮,显示该驱动器的磁盘总容量和剩余磁盘空间。

VC++ 获取磁盘空间容量大小数据运行截图

下面来说下具体的实现方法:GetLogicalDriveStrings 函数可以获得标明所有驱动器的字符串, 前例已经介绍过了。而GetDiskFreeSpaceEx 和GetDiskFreeSpace 则可以获得某个特定驱动器的磁盘空间信息,本例使用的是前者,其定义如下:

BOOL GetDiskFreeSpaceEx(
LPCTSTR lpDirectoryName, //活页夹名,就是驱动器
PULARGE_INTEGER lpFreeBytesAvailableToCaller, //返回可以利用的磁盘空间
PULARGE_INTEGER lpTotalNumberOfBytes, //返回磁盘总的空间数量
PULARGE_INTEGER lpTotalNumberOfFreeBytes //返回空余的磁盘空间数量
);

程序代码的编写:
(1)通过AppWizard 生成基于对话框的应有程序DrvSpace。
(2)增加CCombBox 下拉列表框控件,用来列出所有驱动器。
(3)给对话框增加两个静态文本框,用来显示磁盘空间的数据。
(4)给对话框增加一个函数FindAllDrivers(),用来获得所有驱动器,并将这些驱动器加到列表框中,其定义如下:

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!");
}

(5)更改对话框的OnInitialUpdate 函数,调用FindAllDrivers()函数,获得所有驱动器,其代码如下:

BOOL CDrvSpaceDlg::OnInitDialog()
{
CDialog::OnInitDialog();
//其他初始化代码
//……⋯
//列出所有驱动器
FindAllDrivers();
CComboBox* Driver=(CComboBox*)GetDlgItem(IDC_DRIVER);
Driver->SetCurSel(0);
return TRUE; // return TRUE unless you set the focus to a control
}

(6)给对话框增加获得磁盘空间数据的按钮,其响应函数如下:

void CDrvSpaceDlg::OnGetDrvSpaceInfo()
{
//更新列表框
UpdateData(TRUE);
//获得选择的驱动器
CString Driver;
CComboBox* pDriver = (CComboBox*)GetDlgItem(IDC_DRIVER);
pDriver->GetWindowText(Driver);
//获得磁盘空间信息
ULARGE_INTEGER FreeAv,TotalBytes,FreeBytes;
if(GetDiskFreeSpaceEx(Driver,&FreeAv,&TotalBytes,&FreeBytes))
{
//格式化信息,并显示出来
CString strTotalBytes,strFreeBytes;
strTotalBytes.Format("%u 字节",TotalBytes.QuadPart);
strFreeBytes.Format("%u 字节",FreeBytes.QuadPart);
CStatic* pTotalStatic = (CStatic*)GetDlgItem(IDC_TOTAL);
CStatic* pFreeStatic = (CStatic*)GetDlgItem(IDC_FREE);
pTotalStatic->SetWindowText(strTotalBytes);
pFreeStatic->SetWindowText(strFreeBytes);
}
}

    相关内容:

    相关声明:

      若“VC++ 获取磁盘空间容量大小数据”有损您的权益,请告之我们删除内容。
      部分文章来源于网络,版权归原作者所有。