设置界面 计算本地内存剩余量是否足够保存一个60s的视频


一、计算出指定目录及其子目录文件的大小

qint64 SetWin::FileSize(const QString &path)    //参数路径
{
QDir dir(path);
qint64 size=0;
foreach (QFileInfo fileInfo,dir.entryInfoList(QDir::Files))
size+=fileInfo.size();
foreach (QString subDir,dir.entryList(QDir::Dirs |QDir::NoDotAndDotDot))
size+=FileSize(path+QDir::separator()+subDir);//递归调用函数,计算全部大小

//接下来是换算单位 size原本的单位是‘B’   根据计算 换算成 'M','K','G',但是我只需要以B为单位的size 所以此处屏蔽这段代码
/*
char unit='B';
quint64 cursize=size;
if(cursize>1024)
{
cursize /=1024;
unit='K';
if(cursize>1024)
{
cursize /=1024;
unit='M';
if(cursize>1024)
{
cursize /=1024;
unit='G';
}
}
}*/
//cout< //qDebug()< return size;
}

二、计算输入的内存量 - 计算得到的文件夹大小 判断是否大于一个视频所需要的内存量

假设一个视频 60s ,大概是28MB。同一换算成‘B’单位,然后进行加减计算。

//参数1 文件夹大小目前的大小 ;参数2 界面用户输入的内存值,单位是'G'

bool SetWin::CompareSize(qint64 Bsize, qint64 inputSize)
{
qint64 c_inputSize=inputSize*1024*1024*1024;        //'G'单位换成‘B’
//假设一个视频60秒 大约28Mb
if((c_inputSize-Bsize)>=28*1024*1024)                //'M'单位换成‘B’
{
return true;//说明内存足够 可以继续联网
}
else {
return false;
}
}

三、思路发展

一开始一直想的是吧读取到的文件大小,转成各种单位的数据,但是一个函数只能有一个返回值,不能连单位一起返回出函数,那么经过函数一得到的数据就没有单位了,无法和用户输入的内存大小进行比较。

所以 就把用户输入的值 固定的G单位切换成‘B’单位 同一换算成一个单位,再进行比对

相关