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盘或者磁盘的大小:
在选择一个文件夹查看一下文件夹的总大小:
运行程序后查看结果如下:
Linux C语言磁盘U盘容量读取、目录列表读取、文件夹大小读取相关推荐
- Linux:centos释放缓存,查看磁盘空间大小,xxx文件夹, 查看文件夹大小,查看剩余内存,查看xxx软件位置,统计某文件夹,统计某文件夹下目录数量,查看文件夹大小,给文件夹下所有的文件赋值权限
一台老的PHP后台服务器,今天用 free -m 查看,发现内存跑满了. 再 top,然后按下shift+m,也就是按内存占用百分比排序,发现排在第一的进程,才占用0.9%,那是什么占用的呢?谷歌了一 ...
- pyhton 读取目录下所有文件夹下的文件(指定文件)
前言 1.有的时候比如我们操作错了,将一个文件夹里的.png图片都弄到了不同的文件夹中,现在想还原,如果一个个手工选择剪切,恐怕不是一个好办法. 2.有的时候,想把某个目录下的所有文件夹中的jpg格式 ...
- php 显示目录列表,php读取目录列表与文件列表的代码举例
/** * getDir()去文件夹列表 * getFile()去对应文件夹下面的文件列表 * 二者的区别在于判断有没有"."后缀的文件,其他都一样 * edit bbs.it-h ...
- linux 查看磁盘空间 文件 文件夹 大小
只查看一级目录统计的空间占用 [root@swarm-node1 sdb]# du -h -d1 57M ./leo_log_test 69G ./dsp-bidder-logs 980K ./she ...
- Linux中查看各文件夹大小(扫盘)
df -h ./ du -hs ./ du -h /ifs4/BC_RD/USER/lizhixin/my_project/human_chr22 | grep [[:digit:]+]G du [- ...
- Linux:df查看磁盘大小、du查看文件夹大小
df查看磁盘大小 # df -h文件系统 容量 已用 可用 已用% 挂载点 /dev/vda1 40G 38G 0 100% / devtmpfs 3.9G 0 3.9G 0% /dev tmpfs ...
- linux下循环读取目录文件,linux循环递归读取目录指定类型文件及计算阶乘脚本...
linux循环读取目录指定类型文件脚本 ergodic.sh #!/bin/bash function ergodic { for file in ` ls $1` do if [ -d $1&quo ...
- [linux]解决vsftpd 读取目录列表失败的问题
使用第三方FTP软件filezilla进行登陆,出现如下错误: 状态: 正在连接 192.168.1.6:21... 状态: 连接建立,等待欢迎消息... 响应: 220 (vsFT ...
- Linux 文件大小 文件夹大小 磁盘大小
du -sh 查看当前文件夹下文件与文件夹大小: df -hl 查看磁盘空间大小: 参考文献:www.cnblogs.com/adolfmc/archive/2013/02/16/2913801.ht ...
最新文章
- 构建布局良好的windows程序
- python生成验证码
- resnet论文_ResNet还是DenseNet?即插即用的DS涨点神器来了!
- 怎么用python实现回归_Python使用sklearn实现的各种回归算法示例
- zap+日志分级分文件+按时间切割日志整合demo
- HihoCoder 1323 回文字符串
- springboot热部署失效解决
- stm32驱动_STM32直流电机启动(一)驱动电路的介绍
- Python格式化输出、转义字符、结束符
- 八皇后问题遗传算法c语言,用 遗传算法 解决八皇后问题
- 数字延时网络混响算法研究(FDN)
- 用计算机录制声音让音质更好,电脑有什么好用的录音软件吗
- Navicat for mac破解版
- unbuntu20.04 安装mysql
- 100层楼两个玻璃球怎么能够找到玻璃球破碎的那一层
- LDA模型中需要输入的数据格式
- 2023NPDP产品经理认证如何考取?
- 地理坐标的六边形编码(PHXIS)
- Mysql ERROR 1242 (21000): Subquery returns more than 1 row
- 幼儿园计算机技能大赛,幼儿园新教师五项技能比赛
热门文章
- 计算机应用基础实训报告excel,excel实验报告模板
- 【初赛】初赛提纲 错题本(to be countinue)
- 极客日报第 40 期:小米 11 发布,售价 3999 元起;罗永浩回应败诉半导体公司
- 时间序列预测的评估指标补遗
- 老年人计算机培训信息,老年人学习电脑基础知识
- 使用Python PIL库中的Image.thumbnail函数裁剪图片
- 计算机无法屏幕亮度,电脑更新windows 10 四月更新1803后,笔记本电脑亮度无法调节。...
- 如何查看公众号文章的排版格式字体大小
- 自学前端开发,现在手握大厂offer,我的故事还在继续
- SQL 如何查询时竖着的数据横着显示