Qt 当磁盘可用空间小于指定大小时删除早期的文件

1. 需求

用户反应,电脑由于自身磁盘空间只有128G,由于软件执行一次任务,就要录视频记录,导致磁盘空间爆满,电脑卡,无法再次生成视频

2. 分析:当时软件没有写自动删除视频的代码导致的。

可以写一个检查电脑磁盘的函数,自动检测存放视频的目录。如果磁盘可用空间小于指定的大小,就自动删除早期的视频,如果没有早期的视频,就递归删除现有的视频,直到磁盘可用空间大于指定的大小,如果全部删除,还是小于指定大小,则弹窗提示用户,删除其余不用的文件。

有如下方案:

1. 每隔一段时间,自动检查一次磁盘空间

2. 每次用户执行任务,检查一遍磁盘空间

3. 解决方案

两种方案都没啥问题,我采用了第二种

代码如下:

void Camera::checkDiskSpace() {
    if (getDiskSpace()) {
        emit notifyDiskSpaceInsufficient();
        // 磁盘空间小于阈值,则删除部分早期视频
        QDir VideoDir = QDir(qApp->applicationDirPath() + VIDEO_PLAYBACK_PATH);
        bool flag = false;
        QDateTime today = QDateTime::currentDateTime();
        for(QFileInfo fileInfo : VideoDir.entryInfoList()) {
            if (fileInfo.fileName()=="." || fileInfo.fileName()=="..")
            {
                continue;
            }
            QDateTime date = fileInfo.lastModified();
            uint filedate = date.toTime_t();
            uint todayData = today.toTime_t();
            uint ruler = todayData - filedate;
            ruler /= (60 * 60 * 24);
            //如果文件修改时间大于七天,清理文件及文件夹
            //if (ruler > 7) {
            flag = true;
            if(fileInfo.isDir()) {
                QDir dir(fileInfo.filePath());
                dir.removeRecursively();
            }
            else {
                QFile::remove(fileInfo.filePath());
            }
            if(!getDiskSpace()) {
                break;
            }

        }
        if (flag) {
            WriteLog("由于磁盘可用空间小于视频存储阈值,已删除部分视频文件", "Camera");
        }
    }
}


bool Camera::getDiskSpace()
{
    Q_D(Camera);
    auto path = qApp->applicationDirPath();
    auto storage = QStorageInfo(path);
    storage.refresh();
    auto availableSize = storage.bytesAvailable()/1024/1024/1024;
    // 与指定空间的大小
    auto needClean = availableSize < d->m_diskReserveSize;
    return needClean;
}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值