C++如何递归地算出一个文件夹的大小(不论文件夹有多少层)
Posted 狱典司
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++如何递归地算出一个文件夹的大小(不论文件夹有多少层)相关的知识,希望对你有一定的参考价值。
先看一眼文件结构(即本例的测试路径)
#include <iostream>
#include <string>
#include <vector>
#include<fstream>
#include <io.h>
using namespace std;
string path("C:\\\\Users\\\\SeanWayen\\\\Desktop\\\\test"); //自己选择目录测试
//获取文件大小的函数,返回值以KB为单位
double get_length(string filePath){
double sizeKB = 0;
ifstream fin( filePath );
if( fin.is_open() )
{
fin.seekg( 0, ios::end );
double size = fin.tellg();
if(size == 0){
sizeKB = 0;
}else{
sizeKB = size/1024;
}
fin.close();
}
return sizeKB;
}
double getFileSize(string path)//递归核心代码
{
//文件句柄
intptr_t hFile = 0;
vector<string> files;
//文件信息
struct _finddata_t fileinfo;
string p;
double filesize;
int i = 0;
if ((hFile = _findfirst(p.assign(path).append("\\\\*").c_str(), &fileinfo)) != -1)
{
do
{
if ((fileinfo.attrib & _A_SUBDIR))//判断是否是文件夹
{
//如果是目录,递归查找并累积size
if (strcmp(fileinfo.name, ".") != 0 && strcmp(fileinfo.name, "..") != 0){
filesize +=getFileSize(p.assign(path).append("\\\\").append(fileinfo.name));
}
}
else
{
//如果不是,直接累加size
filesize += get_length(path+"\\\\"+fileinfo.name);
}
} while (_findnext(hFile, &fileinfo) == 0);
_findclose(hFile);
}
return filesize;
}
int main(){
cout<<"test文件夹的大小:"<< getFileSize(path)<<"KB"<<endl;
return 0;
}
- 看一眼运行结果
- 来对照一下文件夹属性:
得嘞
干净又卫生嗷
以上是关于C++如何递归地算出一个文件夹的大小(不论文件夹有多少层)的主要内容,如果未能解决你的问题,请参考以下文章
如何递归获取PowerShell中的所有文件和文件夹的大小,自定义输出
如何在 C++ 中递归查找具有 Unicode 名称的文件?