C++如何递归地算出一个文件夹的大小(不论文件夹有多少层)

先看一眼文件结构(即本例的测试路径)
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++如何递归地算出一个文件夹的大小(不论文件夹有多少层)

  • 来对照一下文件夹属性:

C++如何递归地算出一个文件夹的大小(不论文件夹有多少层)

得嘞
干净又卫生嗷

上一篇:C# 有关文件处理


下一篇:nginx启用brotli压缩算法