1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > Linux C语言磁盘U盘容量读取 目录列表读取 文件夹大小读取

Linux C语言磁盘U盘容量读取 目录列表读取 文件夹大小读取

时间:2020-09-25 17:58:56

相关推荐

Linux C语言磁盘U盘容量读取 目录列表读取 文件夹大小读取

Linux C语言磁盘U盘容量读取、目录列表读取、文件夹大小读取C语言源代码

#include <stdio.h>#include <sys/statfs.h>#include <string.h>#include <dirent.h>#include <stdbool.h> #include <sys/stat.h>/************************************************************原型:bool is_dir(const char *path)*功能:判断是否为目录***********************************************************/bool is_dir(const char *path){struct stat statbuf;if(lstat(path, &statbuf) ==0)//lstat返回文件的信息,文件信息存放在stat结构中{return S_ISDIR(statbuf.st_mode) != 0;//S_ISDIR宏,判断文件类型是否为目录}return false;}/************************************************************原型:bool is_special_dir(const char *path)*功能:判断是否是特殊目录***********************************************************/bool is_special_dir(const char *path){return strcmp(path, ".") == 0 || strcmp(path, "..") == 0;}/************************************************************原型:bool is_file(const char *path)*功能:判断是否为常规文件***********************************************************/bool is_file(const char *path){struct stat statbuf;if(lstat(path, &statbuf) ==0)return S_ISREG(statbuf.st_mode) != 0;//判断文件是否为常规文件return false;}/************************************************************原型:void get_file_path(const char *path, const char *file_name, char *file_path)*功能:生成完整的文件路径***********************************************************/void get_file_path(const char *path, const char *file_name, char *file_path){strcpy(file_path, path);if(file_path[strlen(path) - 1] != '/')strcat(file_path, "/");strcat(file_path, file_name);}/************************************************************原型:int file_size(char* filename) *功能:获取文件的大小,返回文件的字节大小***********************************************************/int file_size(char* filename) {int size = 0;struct stat sss;stat(filename,&sss); size = sss.st_size; return size; } /************************************************************原型:void FileFilderSize(const char *path,int *cap)*功能:获取文件夹的大小,返回文件夹的字节大小***********************************************************/void FileFilderSize(const char *path,int *cap){int sum = 0;char aaa[200] = {0};DIR * dir;struct dirent * dir_info;char file_path[PATH_MAX];if(is_file(path)){remove(path);return;}if(is_dir(path)){if((dir = opendir(path)) == NULL)return;while((dir_info = readdir(dir)) != NULL){get_file_path(path, dir_info->d_name, file_path);if(is_special_dir(dir_info->d_name)){continue;}sprintf(aaa,"%s/%s",path,dir_info->d_name);sum += file_size(aaa);printf("d_name : %s\n", dir_info->d_name);}closedir(dir);}*cap = sum;}/************************************************************原型:int Udisk_Capacity(char *chardir,int *total,int *free)*功能:获取U盘(磁盘)空间大小,单位为KB***********************************************************/int Udisk_Capacity(char *chardir,int *total,int *free){struct statfs s;memset(&s, 0, sizeof(struct statfs));if( 0 != statfs(chardir, &s) ){return -1;}if(s.f_bsize >= 1024){printf("\n if(s.f_bsize >= 1024)\n");*total = (int)( (s.f_bsize / 1024 ) * s.f_blocks );*free = (int) ( ( s.f_bsize / 1024 ) * s.f_bavail );}else{printf("\n if(s.f_bsize < 1024) else\n");*total = (int)( (s.f_blocks / 1024 ) * s.f_bsize );*free = (int) ( ( s.f_bavail / 1024 ) * s.f_bsize );}}int main(void){int a,b,c;Udisk_Capacity("/home/xxx/Desktop",&a,&b);printf("Disk total space =%d KB %d MB %d GB\n",a,a>>10,a>>20);printf("Disk free space=%d KB %d MB %d GB\n",b,b>>10,b>>20);FileFilderSize("/home/xxx/Desktop/testfolder/",&c);printf("FileFolder space = %d bytes %d KB %d MB\n",c,c/1000,c/1000000);}

测试结果

首先测试一下U盘或者磁盘的大小:

在选择一个文件夹查看一下文件夹的总大小:

运行程序后查看结果如下:

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。