<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; }