项目场景:
qt项目中存在大文件导出的场景,需要在导出前需要判断选择的目录的剩余空间大小是否符合要求。因此需要获取选择文件夹的可用空间和导出文件夹的大小。
获取磁盘空间
工具类下载,实现代码如下:
/**
* @brief getDiskSpace 获取盘符的容量
* @param path 路径(例如"C\")
* @param flag 为true则求磁盘总容量,为false则求磁盘剩余容量
* @return 返回容量,MB为单位
*/
qint64 getDiskSpace(QString path, bool flag)
{
qint64 res = 0;
QList<QStorageInfo> storageInfoList = QStorageInfo::mountedVolumes();
foreach (QStorageInfo storageInfo, storageInfoList) {
if(path.startsWith(storageInfo.rootPath())){
if(flag){
res = storageInfo.bytesTotal()/MB;
}else{
res = storageInfo.bytesAvailable()/MB;
}
break;
}
}
return res;
}
获取选择路径下总文件大小
工具类下载,实现代码如下:
/**
* @brief 获取路径下的文件大小:MB
* @param filePath
* @return
*/
qint64 getDirSizeMB(const QString filePath){
qint64 size = getDirSize(filePath);
return size/MB;
}
/**
* @brief 获取路径的文件大小:字节
* @param filePath
* @return
*/
qint64 getDirSize(const QString filePath)
{
QDir tmpDir(filePath);
qint64 size = 0;
/*获取文件列表 统计文件大小*/
foreach(QFileInfo fileInfo, tmpDir.entryInfoList(QDir::Files))
{
size += fileInfo.size();
}
/*获取文件夹 并且过滤掉.和..文件夹 统计各个文件夹的文件大小 */
foreach(QString subDir, tmpDir.entryList(QDir::Dirs | QDir::NoDotAndDotDot))
{
size += getDirSize(filePath + QDir::separator() + subDir); //递归进行 统计所有子目录
}
return size;
}