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 名称的文件?

sh Bash:如何列出每个文件和目录的大小(递归)并按大小排序?

codevs2606 约数和问题