VC++ 获取磁盘空间容量大小数据
- 时间:2019-08-08
- 概述:磁盘空间 容量 大小
有时候需要知道磁盘的空间状况,比如还剩多少空余空间等,本例就介绍在程序中如何获得磁盘空间资料。编译并运行本例程序,如图所示。通过驱动器列表选择驱动器,然后单击【获得磁盘空间信息】按钮,显示该驱动器的磁盘总容量和剩余磁盘空间。
下面来说下具体的实现方法: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++ 获取驱动器序列号2019-08-01阅读2次
相关声明:
- 若“VC++ 获取磁盘空间容量大小数据”有损您的权益,请告之我们删除内容。
部分文章来源于网络,版权归原作者所有。