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盘或者磁盘的大小:

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

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

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

  1. Linux:centos释放缓存,查看磁盘空间大小,xxx文件夹, 查看文件夹大小,查看剩余内存,查看xxx软件位置,统计某文件夹,统计某文件夹下目录数量,查看文件夹大小,给文件夹下所有的文件赋值权限

    一台老的PHP后台服务器,今天用 free -m 查看,发现内存跑满了. 再 top,然后按下shift+m,也就是按内存占用百分比排序,发现排在第一的进程,才占用0.9%,那是什么占用的呢?谷歌了一 ...

  2. pyhton 读取目录下所有文件夹下的文件(指定文件)

    前言 1.有的时候比如我们操作错了,将一个文件夹里的.png图片都弄到了不同的文件夹中,现在想还原,如果一个个手工选择剪切,恐怕不是一个好办法. 2.有的时候,想把某个目录下的所有文件夹中的jpg格式 ...

  3. php 显示目录列表,php读取目录列表与文件列表的代码举例

    /** * getDir()去文件夹列表 * getFile()去对应文件夹下面的文件列表 * 二者的区别在于判断有没有"."后缀的文件,其他都一样 * edit bbs.it-h ...

  4. linux 查看磁盘空间 文件 文件夹 大小

    只查看一级目录统计的空间占用 [root@swarm-node1 sdb]# du -h -d1 57M ./leo_log_test 69G ./dsp-bidder-logs 980K ./she ...

  5. Linux中查看各文件夹大小(扫盘)

    df -h ./ du -hs ./ du -h /ifs4/BC_RD/USER/lizhixin/my_project/human_chr22 | grep [[:digit:]+]G du [- ...

  6. Linux:df查看磁盘大小、du查看文件夹大小

    df查看磁盘大小 # df -h文件系统 容量 已用 可用 已用% 挂载点 /dev/vda1 40G 38G 0 100% / devtmpfs 3.9G 0 3.9G 0% /dev tmpfs ...

  7. linux下循环读取目录文件,linux循环递归读取目录指定类型文件及计算阶乘脚本...

    linux循环读取目录指定类型文件脚本 ergodic.sh #!/bin/bash function ergodic { for file in ` ls $1` do if [ -d $1&quo ...

  8. [linux]解决vsftpd 读取目录列表失败的问题

    使用第三方FTP软件filezilla进行登陆,出现如下错误: 状态:    正在连接 192.168.1.6:21... 状态:    连接建立,等待欢迎消息... 响应:    220 (vsFT ...

  9. Linux 文件大小 文件夹大小 磁盘大小

    du -sh 查看当前文件夹下文件与文件夹大小: df -hl 查看磁盘空间大小: 参考文献:www.cnblogs.com/adolfmc/archive/2013/02/16/2913801.ht ...

最新文章

  1. 构建布局良好的windows程序
  2. python生成验证码
  3. resnet论文_ResNet还是DenseNet?即插即用的DS涨点神器来了!
  4. 怎么用python实现回归_Python使用sklearn实现的各种回归算法示例
  5. zap+日志分级分文件+按时间切割日志整合demo
  6. HihoCoder 1323 回文字符串
  7. springboot热部署失效解决
  8. stm32驱动_STM32直流电机启动(一)驱动电路的介绍
  9. Python格式化输出、转义字符、结束符
  10. 八皇后问题遗传算法c语言,用 遗传算法 解决八皇后问题
  11. 数字延时网络混响算法研究(FDN)
  12. 用计算机录制声音让音质更好,电脑有什么好用的录音软件吗
  13. Navicat for mac破解版
  14. unbuntu20.04 安装mysql
  15. 100层楼两个玻璃球怎么能够找到玻璃球破碎的那一层
  16. LDA模型中需要输入的数据格式
  17. 2023NPDP产品经理认证如何考取?
  18. 地理坐标的六边形编码(PHXIS)
  19. Mysql ERROR 1242 (21000): Subquery returns more than 1 row
  20. 幼儿园计算机技能大赛,幼儿园新教师五项技能比赛

热门文章

  1. 计算机应用基础实训报告excel,excel实验报告模板
  2. 【初赛】初赛提纲 错题本(to be countinue)
  3. 极客日报第 40 期:小米 11 发布,售价 3999 元起;罗永浩回应败诉半导体公司
  4. 时间序列预测的评估指标补遗
  5. 老年人计算机培训信息,老年人学习电脑基础知识
  6. 使用Python PIL库中的Image.thumbnail函数裁剪图片
  7. 计算机无法屏幕亮度,电脑更新windows 10 四月更新1803后,笔记本电脑亮度无法调节。...
  8. 如何查看公众号文章的排版格式字体大小
  9. 自学前端开发,现在手握大厂offer,我的故事还在继续
  10. SQL 如何查询时竖着的数据横着显示