在我们写项目时,不可避免要保存数据、图片什么的,积累多了磁盘就满了,最近做的项目就是需要保存图片,其中就需要监控磁盘是否还够用,以便清空图片数据。对于获取系统磁盘,Windows系统已经提供了API来获取(如下),代码在WinBase.h中,我们在编码时需要把<windows.h>头文件包含进去
GetDiskFreeSpaceExW(
__in_opt LPCWSTR lpDirectoryName, //盘符名(如"C\")
__out_opt PULARGE_INTEGER lpFreeBytesAvailableToCaller,
__out_opt PULARGE_INTEGER lpTotalNumberOfBytes, //总容量
__out_opt PULARGE_INTEGER lpTotalNumberOfFreeBytes //剩余容量
);
#ifdef UNICODE
#define GetDiskFreeSpaceEx GetDiskFreeSpaceExW
#else
下边我们就来获取下电脑上的磁盘及空间
#include <QtWidgets/QApplication>
#include <QString>
#include <QDebug>
#include <QDir>
#include <QFileInfoList>
#include <Windows.h>
#define GB (1024*1024*1024)
//获取磁盘容量
quint64 getDiskSpace(QString iDriver, bool flag)
{
//iDriver为盘符(例如"C\"),flag为true则求磁盘总容量,为false则求磁盘剩余容量
LPCWSTR strDriver=(LPCWSTR)iDriver.utf16();
ULARGE_INTEGER freeDiskSpaceAvailable, totalDiskSpace, totalFreeDiskSpace;
//调用函数获取磁盘参数(单位为字节Byte),转化为GB,需要除以(1024*1024*1024)
GetDiskFreeSpaceEx( strDriver, &freeDiskSpaceAvailable, &totalDiskSpace, &totalFreeDiskSpace) ;
if(flag)
{
return (quint64) totalDiskSpace.QuadPart/GB;
}
else
{
return (quint64) totalFreeDiskSpace.QuadPart/GB;
}
}
//获取电脑所有盘符名
QStringList getDiskName()
{
QFileInfoList list = QDir::drives();
QStringList diskNameList(NULL);
for (int i=0; i<list.count(); i++)
{
QString str = list.at(i).absoluteDir().absolutePath();
diskNameList.append(str);
}
return diskNameList;
}
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QStringList diskList = getDiskName();
foreach(QString str, diskList)
{
if (str.isEmpty())
{
continue;
}
quint64 totalDiskSpace = getDiskSpace(str, true);
quint64 freeDiskSpace = getDiskSpace(str, false);
qDebug() << QString::fromLocal8Bit("盘符") + str + QString::fromLocal8Bit("【总容量:") << totalDiskSpace \
<< QString::fromLocal8Bit("\t剩余容量:") << freeDiskSpace << QString::fromLocal8Bit("】");
}
return a.exec();
}
编译输出:
输出的便是我电脑上的磁盘使用情况,其中G盘对应的是光驱,上边输出的容量值不是很明白,其余几个盘便是我们电脑上的硬盘,跟我们的输出情况一样。