Linux 下C编程实现文件夹下文件大小和二级文件夹大小统计

Linux笔记 最全的Linux笔记 阅读详情

时间:2017年12月29日

环境Linux+编译器gcc

问题记录1:

最近在搞统计目录下文件和文件大小的实现,一开始上博客以及上网找相应的demo,找到一些,但大都只是统计当前文件夹下文件的总大小,即没有统计当前文件以及二级文件夹的能力,所以自己弄了一个能够实现当前目录下二级目录的大小统计。


问题记录2:关于stat函数问题

首先还是贴一下stat函数的原型吧,如下。

表头文件:    #include <sys/stat.h>
                   #include <unistd.h>
定义函数:    int stat(const char *file_name, struct stat *buf);
函数说明:    通过文件名filename获取文件信息,并保存在buf所指的结构体stat中
返回值:      执行成功则返回0,失败返回-1,错误代码存于errno

好了,开始说问题了:

使用Linux下stat文件属性函数时,如果你直接把文件名传入stat函数,这时他只会在当前,即程序所在目录下进行查找该文件,如果找不到那么将失败,因此,如果你是想通过这个程序去统计其它文件夹里面的文件,这时需要将那个文件的全路径传给stat函数,这样就不会出错了。

说了这么多贴一下代码,大家一起分享一下吧:

#include <stdio.h> 
#include <dirent.h> 
#include <string.h>
#include <sys/types.h>
#include <stdbool.h>
#include <sys/stat.h> 


void main(int argc,char **argv)
{
int caculatefilesize(char *path,bool ischilddir);
bool ischilddir =false;


if(argc<2)
{
printf("Usage:%s + %s\n",argv[0],argv[1]);
return;
}
caculatefilesize(argv[1],ischilddir);
}


int caculatefilesize(char *path,bool ischilddir)
{
DIR *ptr; 
struct stat buf; 
  struct dirent *dir; 
 
bool childDirflag=false;
char pathname[60];
char pathnametmp[60];


int pathNamelen=sizeof(pathname);
  int total_size=0; 
  int len =0; 


if((ptr = opendir(path))==NULL)
{
printf("Open dir failed!\n");
return -1;
}

strcpy(pathnametmp,path);
strcat(pathnametmp,"/");


for (dir = readdir(ptr); dir != NULL; dir = readdir(ptr)) 
{
if(!strcmp(".",dir->d_name)||!strcmp("..",dir->d_name)) 
continue;
memset(pathname,0,pathNamelen);
strcpy(pathname,pathnametmp);
strcat(pathname,dir->d_name);

if(stat(pathname, &buf)<0)
{
printf("Couldn't stat %s\n", dir->d_name); 
continue;
}


if(S_ISDIR(buf.st_mode))
{
childDirflag =true;
total_size =caculatefilesize(pathname,childDirflag);
printf("the size:%dByte filename:%s\n",total_size,pathname);
continue;
}
if(ischilddir)
{
len = buf.st_size;
total_size +=len;
}
else 
{
len = buf.st_size;
printf("the size:%dByte filename:%s\n",len,dir->d_name); 
}
}
closedir(ptr);
return total_size;
}

以上只是能够查找二级文件夹(二级文件夹下没有下一级文件夹)大小,可继续改进。

over!



Python爬虫实战:抓取全球各国海关进出口数据的全流程教程 本文系统介绍了用Python采集全球各国海关进出口数据的完整流程,从数据源调研、技术选型,到代码实战、数据处理和存储,最后还拓展了进阶反爬和动态内容处理方法。希望这篇博文能帮助你掌握专业的数据采集技能,为后续数据分析和商业应用奠定坚实基础。 阅读详情

相关推荐

用Matlab系统辨识工具箱搞定温控系统建模:从阶跃响应到传递函数(附完整代码)

本文详细介绍了如何使用Matlab系统辨识工具箱进行温控系统建模,从阶跃响应数据采集到传递函数参数辨识的全过程。通过实际案例和完整代码,帮助工程师快速掌握PID控制参数整定技巧,提升温控系统设计效率。特别适合单片机开发者和自动化控制工程师参考。

weixin_30736301的博客 310

linux计算多个文件大小的和,linux统计多个文件大小总和

首先:查看当前文件夹大小的命令是: [root@host1 test]# du -sh 39M . 查看当前文件夹下所有文件的大小: [root@host1 test]# du -sh * 108K config-2.6.32-573.el6.x86_64 264K efi 284K grub 27M initramfs-2.6.32-573.el6.x86_64.img 4.4M initrd-...

weixin_29144939的博客 5944

STM32平台中ARM架构向量表配置:手把手教程

深入讲解STM32平台下arm架构的向量表配置方法,结合实际操作步骤,帮助开发者掌握中断向量的定位与初始化,提升嵌入式系统开发效率。

weixin_42514540的博客 802

Linux 获取文件大小--C函数

#include unsigned long get_file_size(const char *path) {     unsigned long filesize = -1;     struct stat statbuff;     if(stat(path, &statbuff)         return filesize;     }else{         f

komtao520的博客 486

Python XML 转 JSON,XML 转字典

今天我们将学习如何在 Python 中将 XML 转换为 JSON 和 XML 转换为字典。我们可以使用 Python 的xmltodict模块来读取 XML 文件并将其转换为字典或 JSON 数据。我们还可以在大型 XML 文件上进行流式处理,并将其转换为字典。在进入编码部分之前,让我们首先了解为什么需要进行 XML 转换。

rubys_的专栏 2502

《UDS协议从入门到精通》系列——图解0x23:通过地址读取内存

如何读取ECU中指定内存地址的数据?图解UDS 0x23服务带你快速上手!!

车载系统攻城狮 2623

linux如何求文件夹大小,Linux C 计算文件夹大小、数目(包括子目录、文件)

Linux C 计算文件夹大小数目(包括子目录、文件)自己手工码的,并测测试可以通过。#include #include #include #include #include #include /*dirname: 要统计的文件夹路径返回组: 计算的所有文件的数目(包括文件合目录)*/long get_file_count(char *dirname){DIR *dir;s...

weixin_33739591的博客 967

微信支付接口「系统繁忙 SYSTEM_ERROR」/「文件不存在」报错分析与解决方案 接口开发实现SDK

微信支付的“平台证书模式”只有5年的有效期,过期后微信支付将不再签发新的平台证书,转而要求开发者使用“微信支付公钥”来处理敏感信息加密及回调签名验证。然而,由于以下几点原因,许多开发者在调用 获取平台证书。尽管微信支付在技术迭代上有其必要性,但报错设计过于不友好。诸如“系统繁忙”这样的提示很难直接关联到平台证书失效或公钥切换问题。这样的信息表达,开发者不仅看不懂,还需要花费大量时间分析排查,非常影响效率。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 780

linux下用C计算某一个目录总大小

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34416754的博客 635

FPGA工程师面试——FPGA基础知识24题

线与逻辑是两个输出信号相连可以实现与的功能。在硬件上,要用OC门(集电极开路与非门)来实现,由于不用OC门可能使灌电流过大,而烧坏逻辑门,因此在输出端口应加一个上拉电阻。

FPGA/MATLAB学习教程/源码/项目合作开发 1086

【ARM AMBA5 CHI 2 -- CHI 链路层详细介绍 】

目前有六个版本的 CHI 协议,CHI-A 是 CHI 协议的第一个版本。它提供了一个传输层,具有减少拥塞的功能。新通道、CHI 术语和组件命名的定义;请求、监听过滤器和缓存状态转换的示例;事务排序、独占访问和分布式虚拟内存(DVM)操作的规则;CHI-B 问题扩展了 CHI-A,但不能直接向后兼容 CHI-A。更大的物理地址宽度;原子事务;DVM 的 VMID 扩展;通道字段、事务结构和可靠性、可用性和可维护性(RAS)特性的描述;

CodingCos的博客 2535

Linux下的C++程序:统计一个目录及其内部文件总共占据的空间大小

统计一个目录的大小(byte数),最简单的办法是在控制台输入命令: du-sb目录地址 用C++实现这个功能,是通过递归遍历目录下的文件和子目录达到的。需要注意的是,因为Byte数过大,单用一个整型统计Byte的数量,遇到大一些的目录会出现溢出。因此我采用了TB、GB、MB、KB和...

638

ROS2 - 乐动激光雷达 LD06

STL-06P 主要由激光测距核心,无线传电单元,无线通讯单元,角度测量单元、电机驱动单元和机械外壳组成。STL-06P 测距核心采用 DTOF 技术,可进行每秒 5000 次的测距。每次测距时,雷达发射出红外激光,激光遇到目标物体后被反射到单光子接收单元。

机器人控制与仿真应用 3486

linux遍历文件夹下所有文件大小,Linux系统遍历文件夹 获取文件大小的操作(C语言实现)...

/**linux 下遍历文件夹以及获取文件大小*/#include #include #include #include /** 获取文件大小,但是文件大小不能超过2G ,该方法不推荐使用 */unsigned long get_file_size_small(const char *filename){FILE *pFile = NULL;int iRet = 0;unsigned long u...

weixin_30666427的博客 1247

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

统计windows文件夹下文件大小(python脚本和powershell脚本)

import os totalSize = 0fileNum = 0dirNum = 0 def visitDir(path): global totalSize global fileNum global dirNum for lists in os.listdir(path): sub_path = os.path.join(path, li...

741

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

linux 文件夹地址栏,linux如何查看目录或文件夹的总大小--du命令

记录一下如何查看一个目录或文件夹的总大小. 使用du命令的选项-s,可以统计整个目录或文件夹的大小. 例如 du -sk ./ 156k -k表示以KB为单位计算.…只显示目录文件夹 ls -F |grep "/$" 显示 目录权限 ls -al |grep "^d" 只显示文件 ls -al |grep "^-" 参数: -F 类型 -R 递归 -S 大小排序 -s 每个文件夹下面大小输出 -t...

weixin_30750349的博客 799

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

html列出目录文件大小,Windows下显示目录大小及文件个数

用批处理实现Windows下子目录大小统计功能吴旻泰岩网络工作室统计当前目录下各文件夹的大小,在Linux下面比较简单,一个 du -sh * 命令就基本解决问题了。虽然在资源管理器是单击右键,然后选属性可以看到某个文件夹的大小,但当我想知道C:\windows目录下哪个子目录占用了1G以上的空间时,这个方法就显得太笨了,要一个一个点半天才能有结果。本文提到的方法,是利用了 dir /s 这个命令...

weixin_35501172的博客 700

【Linux】【Command】查找与统计【grep find wc】

Linux 下的查找命令:grep 和 find

Tranquil_ovo的博客 2412

linux c编程:文件的操作

在Linux系统中,系统是通过inode来获得这个文件的信息。在Linux系统中,inode的信息都是封装在stat这个结构体中。可以通过man 2 stat来查看stat的具体结构。从中可以看到包含了文件的UID,GID,大小,以及访问,修改,改变文件状态的时间 struct stat { dev_t st_dev; /* ID of device containing fil...

dianjie9145的博客 110

linux 获取磁盘空间大小

1.查看文件大小  查看当前文件夹下所有文件大小(包括子文件夹)    du -sh   # du -h 15M     ./package 16K     ./.fontconfig 4.0K    ./.cache 5.1M    ./.rpmdb 20M     .   查看指定文件夹下所有文件大小(包括子文件夹) # du -h ftp

Hello,world! 6347

【Linux C 编程】标准 IO 详解与实战:从基础接口到文件操作实战

标准 IO(Standard I/O)是 C 语言提供的一套文件操作接口,封装了底层的系统调用(如 read/write),并引入缓存机制提升 IO 效率。相比系统调用,标准 IO 具有跨平台性强、使用简单、缓存优化等优势,是 Linux C 编程中文件操作的首选方式。标准 IO 是 Linux C 编程中文件操作的核心工具,其核心优势在于缓存机制和跨平台性。

2401_85893688的博客 695

Linux 文件类信息统计指令(awk、sort、wc -l)

cat file |grep -o word |wc -l 统计file文件中word这个关键字出现的个数 cat file |grep word |wc -l 统计file文件中word这个关键字出现的行数。

qq_35789269的博客 1921

【原创-case3】 用 dir 查看一个目录下所有文件和文件夹的大小!(未完成)

之后新改正确的答案,但是老的笔记也留着,当一个学习轨迹 一 对于小白,在学习cmd之前需要搞清楚这么几件事 搞清楚 命令行命令适用的系统环境等,并非通用,比如win下输入 dir 而linux要输入ls 基本的书写语法,一些此语言的 专业词汇,如 cmd 开关 参数等等 基本的常用命令,其他的开关,参数了解即可,随用随查 会清晰的提问,先入门,然后准确的提问,多查询。 从现在开始...

奔跑的犀牛先生 1万+

【大数据技术】实验2:熟悉常用的HDFS操作和基于MapReduce的词频统计

【大数据技术】实验2:熟悉常用的HDFS操作和基于MapReduce的词频统计

qq_45614178的博客 3657

深入解析Linux du命令:从磁盘空间统计原理到实战应用

在Linux系统管理和运维中,磁盘空间管理是基础且关键的技能。理解文件系统如何以块(Block)为单位分配存储空间,是掌握磁盘使用统计原理的核心。块作为文件系统的基本存储单元,通常为4KB,这导致文件的实际磁盘占用(物理块分配)与其表观大小(逻辑数据量)存在差异,从而产生内部碎片。这种差异直接影响系统管理员对存储资源的评估与规划。du命令正是基于这一原理,通过统计文件占用的块数来反映真实的磁盘使用情况,为容量监控、性能优化和成本控制提供准确依据。在应用场景上,du常用于服务器磁盘空间告警排查、日志文件分析、

weixin_30915275的博客 424

文件目录大小计算:从树形结构遍历到多语言实现详解

树形数据结构是计算机科学中用于表示层次关系的基础模型,其核心原理在于节点与边的父子关联,通过递归或迭代算法进行遍历。这一结构的技术价值在于能够高效地组织和管理具有层级关系的数据,例如文件系统、组织架构和前端组件树。在实际应用场景中,计算目录总大小是文件系统元数据管理和资源统计的常见需求,它要求对树进行深度或广度优先搜索以累加节点值。本文以一道高频机试题为例,深入探讨了使用哈希表存储节点信息、并通过递归或迭代策略遍历目录树的核心解法,同时提供了Java、Python等多种语言的实现对比与工程实践中的边界陷阱分

weixin_34342992的博客 322
上一篇: QT+ffmpeg 简单视频播放代码及问题记录
下一篇: ffmpeg 视频解码 vformat_find_stream_info() 后获取视频分辨率错误问题
Chasing_Chasing
博客等级 码龄10年 233粉丝 87原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值