先看一眼文件结构(即本例的测试路径)
#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;
}
- 看一眼运行结果
- 来对照一下文件夹属性:
得嘞
干净又卫生嗷