QT中获取磁盘可用空间

    在我们写项目时,不可避免要保存数据、图片什么的,积累多了磁盘就满了,最近做的项目就是需要保存图片,其中就需要监控磁盘是否还够用,以便清空图片数据。对于获取系统磁盘,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盘对应的是光驱,上边输出的容量值不是很明白,其余几个盘便是我们电脑上的硬盘,跟我们的输出情况一样。

猜你喜欢

转载自blog.csdn.net/lms1008611/article/details/81488608