QT 获取本地磁盘空间大小

一、背景

近日,接到产品需求,需要在程序启动的时候,判断磁盘剩余空间大小,当磁盘空间小于一定的值时,弹出警告,提示用户,接下来的操作可能会因为磁盘空间不足导致操作失败!
好,废话少说,让我们一起来看看怎么实现吧!

二、实现方法

方法一:

使用QT自带的类QStorageInfo,获取磁盘信息:
注意: linux平台获取的是根目录下的磁盘空间;

优点: QT自带,不需要区分平台

代码如下:


int AppManager::getDiskFreeGB(const QString &disk)
{
    int totalGB = 0;
    int freeGB = 0;
    QString curDisk = disk;
    if(curDisk.isEmpty())
    {
        curDisk = QCoreApplication::applicationDirPath(); //我这获取的是程序安装的磁盘空间
        // QStorageInfo ROM = QStorageInfo::root(); 获取当前系统盘 win: C盘
        QStorageInfo SD;
        SD.setPath(curDisk);
        SD.refresh();

        totalGB = SD.bytesTotal()/1024/1024/1024;
        freeGB = SD.bytesFree()/1024/1024/1024 ;

        INFOLOG("文件系统路径:{0}",SD.rootPath().toStdString());
        INFOLOG("文件系统类型:{0}", SD.fileSystemType().toStdString());

        qDebug() << "总大小:" << totalGB << "GB";
        qDebug() << "可用空间:" << freeGB << "GB";
    }

    INFOLOG("总大小:{0}",totalGB);
    INFOLOG("可用空间:{0}",freeGB);
    return freeGB;
}

方法二:

使用window api 获取磁盘空间:
缺点: linux平台不兼容,代码需要区分平台

#include <QCoreApplication>
#include <QDebug>
#include <Windows.h>
#include <QStorageInfo>

double getDiskFreeSpace(QString driver)
{
#if defined(Q_OS_WIN32)
    LPCWSTR lpcwstrDriver=(LPCWSTR)driver.utf16();
    ULARGE_INTEGER liFreeBytesAvailable, liTotalBytes, liTotalFreeBytes;
    if(!GetDiskFreeSpaceEx( lpcwstrDriver, &liFreeBytesAvailable, &liTotalBytes, &liTotalFreeBytes))
    {
        qDebug() << "ERROR: Call to GetDiskFreeSpaceEx() failed.";
        return 0;
    }
    return (double) liTotalFreeBytes.QuadPart/1024/1024/1024;
#else
    int state;
    struct statvfs vfs;
    fsblkcnt_t block_size = 0;
    fsblkcnt_t free_size;

    state = statvfs("/",&vfs);
    if(state < 0){
        printf("read statvfs error!!!\n");
    }
    block_size = vfs.f_bsize;
    free_size = vfs.f_bfree * block_size;
    return free_size/1024/1024/1024;
#endif
}

void getDiskInfo()
{
    QStorageInfo ROM = QStorageInfo::root();
    ROM.refresh();  //获得最新磁盘信息
    qDebug() <<"文件系统路径:"<<ROM.rootPath();
    if(ROM.isReadOnly())qDebug() << "只读文件系统:" << ROM.isReadOnly();
    qDebug() << "文件系统类型:" << ROM.fileSystemType();
    qDebug() << "总大小:" << ROM.bytesTotal()/1024/1024/1024 << "GB";
    qDebug() << "可用空间:" << ROM.bytesAvailable()/1024/1024/1024 << "GB";
    qDebug() << "可用空间:" << ROM.bytesFree()/1024/1024/1024 << "GB";
}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    qDebug()<<"D free :"<<getDiskFreeSpace("D:")<<"GB";
    getDiskInfo();
    return a.exec();
}

好啦 ! 是不是很简单~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值