<pre code_snippet_id="1622396" snippet_file_name="blog_20160324_1_744516" name="code" class="cpp">遍历文件夹获取整个文件夹的占用空间:
uint64_t dir_space(char *path)
{
int ret = 0;
uint64_t space = 0;
char cur_dir[PATH_MAX + 1] = {0};
DIR *dir = NULL;
struct dirent *ent = NULL;
if (NULL == path)
{
return 0;
}
dir = opendir(path);
if (NULL == dir)
{
return 0;
}
if (NULL == getcwd(cur_dir, PATH_MAX))
{
closedir(dir);
return 0;
}
chdir(path);
printf("current dir is %s\n", path);
ent = readdir(dir);
while (NULL != ent)
{
if (strcmp(ent->d_name, ".") == 0 || strcmp(ent->d_name, "..") == 0)
{
space += 4096;
goto GOON;
}
if (ent->d_type == DT_DIR)
{
space += 4096;
space += dir_space(ent->d_name);
}
else
{
struct stat st;
lstat(ent->d_name, &st);
space += st.st_size;
}
GOON:
ent = readdir(dir);
}
chdir(cur_dir);
closedir(dir);
printf("out of dir %s\n", path);
return space;
}