扫描dir目录函数之scandir()

article/2025/9/28 14:19:34

scandir: 读取特定的目录数据头文件: dirent.h 函数定义: int scandir(const char *dir, struct dirent ***namelist, int (*select)(const struct dirent *), int (*compar)(const struct dirent**, const struct dirent**)); 

说明: scandir()会扫描参数dir指定的目录文件, 经由参数select指定的函数来挑选目录结构至参数 namelist数组中, 最后在调用参数compar指定的函数来排序namelist数组中的目录数据. 每次从目录文件中读取一个目录结构后便将此结构传给参数select所指的函数, select函数若不想要将此目录机构复制到 namelist数组就返回0, 若select为空指针则代表选择所有的目录结构. scandir()会调用qsort()来排序数据, 参数compar则为qsort()的参数, 若是要排列目录名称字母则可使用alphasort(). 结构dirent定义请参考readdir(). 成功则返回复制到namelist数组中的数据结构数目, 有错误发生则返回-1. ENOMEM表示核心内存不足.

其中 dirent原型为:

struct linux_dirent64 {u64		d_ino;s64		d_off;unsigned short	d_reclen;unsigned char	d_type;char		d_name[0];
};

测试一下该函数功能,新建一个文件夹“test”在里面建若干文件和文件夹 如图:



编写测试代码:

      #include <dirent.h>intmain(void){struct dirent **namelist;int n;n = scandir(".", &namelist, NULL, alphasort);if (n < 0)perror("scandir");else {while (n--) {printf("%s:%d\n", namelist[n]->d_name,namelist[n]->d_type);free(namelist[n]);}free(namelist);}}

运行发现:

F5:0
F4:0
F3:0
F2:0
F1:0
D4:0
D3:0
D2:0
D1:0
..:0
.:0

说明namelist[n]->d_type对文件类型支持还是不够的,需要用stat函数继续对其分析。

完整测试代码如下:

	struct dirent **namelist;struct stat tStat;int n;char strTmp[256];n = scandir("/prj/test/", &namelist, NULL, alphasort);if (n < 0)perror("scandir");else {while (n--) {snprintf(strTmp, 256, "%s/%s", "/prj/test/", namelist[n]->d_name);strTmp[255] = '\0';if ((stat(strTmp, &tStat) == 0)){if(S_ISDIR(tStat.st_mode)){printf("%s:is a dir\n", namelist[n]->d_name);}else if(S_ISREG(tStat.st_mode)){printf("%s:is a file\n", namelist[n]->d_name);}else{printf("%s:unknow2\n", namelist[n]->d_name);}}free(namelist[n]);}free(namelist);}

此时打印信息为:

F5:is a file
F4:is a file
F3:is a file
F2:is a file
F1:is a file
D4:is a dir
D3:is a dir
D2:is a dir
D1:is a dir
..:is a dir
.:is a dir

将该目录下的文件及目录都识别出来了


http://chatgpt.dhexx.cn/article/0ZWIMalm.shtml

相关文章

解决Error: ENOENT: no such file or directory, scandir

解决Error: ENOENT: no such file or directory, scandir xxx\node-sass\vendor 前端项目持续部署打包中出现一个奇怪的问题&#xff0c;记录一下。 cnpm install 安装依赖成功 npm run build 构建时失败了&#xff0c;错误表示没有 D:\andex\stofrontend\node_modules\nod…

Module build failed: Error: ENOENT: no such file or directory, scandir node_modules\node-sass\vendor

npm install 报错 Module build failed: Error: ENOENT: no such file or directory, scandir D:\workspaces\xxx\node_modules\node-sass\vendor npm install node-sass 或者 npm rebuild node-sass 即可 下载完成后项目成功启动。

解决Vue Disconnected from UI server errno: -4058, syscall: ‘scandir‘, code: ‘ENOENT‘,

启动vue ui时出现上述报错 查看powershell中的错误提示 发现问题出在扫描项目时项目中少了某个文件夹 解决方法&#xff1a;手动创建该文件 问题解决

npm安装electron时报Error: EPERM: operation not permitted, scandir.....

刚弄完vue脚手架,准备安装electron写个桌面应用&#xff0c;运行命令vue add electron-builder一直报错 Error: EPERM: operation not permitted, scandir C:\Users\ &#xff0c;百度解释说因为没有权限操作&#xff0c;于是百度试各种方法&#xff0c; 打开黑窗口一遍遍尝试&…

解决“: no such file or directory, scandir ‘..\node_modules\node-sass\vendor“

一、报错信息 二、出现原因 在下载包完成启动项目时出现 Error: ENOENT: no such file or directory, scandir ‘D:…\signpay-admin-new\node_modules\node-sass\vendor’ 三、解决办法 重新下载node-sass包即可 npm rebuild node-sass

解决 no such file or directory, scandir ‘node_modules\node-sass\vendor 报错

运行项目突然报错【no such file or directory, scandir node_modules\node-sass\vendor】这个错误 报错说是找不到node-sass文件路径&#xff0c;最后找到了解决方案 错误截图如下&#xff1a; 重新构建一下npm rebuild node-sass包 npm rebuild node-sass 再直接运行&…

C语言测试。自己实现scandir 函数

在C语言课程的后端&#xff0c;讲完指针和标准文件IO处理&#xff0c;我会做出一个难度较大练习&#xff0c;题目就是&#xff0c; 利用标准的目录处理函数 opendir/readdir/closedir实现类似于 scandir的功能。其中接口要scandir 函数一致。 这个题目看起来简单&#xff0c;实…

5G物联网设备,防止黑客入侵是首要问题

5G IoT设备预计2023年将达到4900万台&#xff0c;研究人员启动了一些程序来防止IoT成为渗透的黑洞。开放标准被认为可以推动物联网设备的互操作性&#xff0c;从而使网络安全软件可以在整个网络中查询设备。许多供应商甚至希望在物联网节点中安装应用程序或代理。毕竟所有移动设…

5G技术在物联网行业的应用

2015年6月&#xff0c;国际电信联盟无线通信部门&#xff08;ITU-R&#xff09;5G 工作组第 22 次会议召开&#xff0c;正式将 5G 命名为 IMT-2020。 什么是5G 5G网络即第五代移动通信网络&#xff0c;数据传输速率远高于以前的蜂窝网络&#xff0c;最高可达10 Gbit/s&#xff…

当5G物联网“遇上”供水?供水行业智慧化更进一步!

伴随着5G、物联网等技术的发展&#xff0c;智慧水务产品数字化和智能化程度正在以前所未有的速度提升。在众多水务应用场景中&#xff0c;二次供水因其居民用水“最后一公里”的特殊性&#xff0c;成为水务智慧化的首选方向。 近期&#xff0c;天翼物联携手水务行业龙头企业上海…

5G 及其对物联网的影响

文章转载自网络通信频道 毫不奇怪&#xff0c;数字世界正在通过先进的解决方案逐渐扩展其功能。物联网不再是一项新技术&#xff0c;而是从制造业到教育等不同行业数字化转型战略的共同组成部分。 5G 连接目前使其在技术世界中的存在更加稳定。根据 2022 年 GSMA 的移动经济报告…

MQTT网关 5G物联网网关 PLC控制工业网关

MQTT网关&#xff0c;两个以上的节点之间通信的新型网关&#xff0c;网络节点之间通过互连来实现双向通信。支持PLC协议转MQTT&#xff0c;实现plc数据采集上云&#xff0c;物联网云平台对接&#xff0c;广泛应用于工业自动化plc远程监测控制。 计讯物联5G MQTT物联网网关TG463…

智慧工厂自动化智能制造对5G物联网技术应用的功能与优势

5G物联网网关应用下的5G智慧工厂自动化智能制造&#xff0c;依托物联网、感知、 无线、大数据云计算等高新技术&#xff0c;连接工厂各节点设备网络&#xff0c;建立数据涌道&#xff0c;实现采集现场生产信息远程在线实时监控&#xff0c;生产过程的全方位可视化和现场生产设备…

【通信】基于粒子群实现5G物联网云网络优化附matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法 …

计讯物联5G物联网智能网关助力充电桩运维管理更加高效

随着中国“碳达峰、碳中和”发展目标的提出&#xff0c;新能源汽车渗透率的不断提升&#xff0c;充电桩基础设施建设也随之全面提速。计讯物联聚焦国家政策热点&#xff0c;洞悉行业最新风向&#xff0c;将充电桩、智能电网与物联网技术有机融合&#xff0c;自主研发5G物联网智…

计算机技术5G,计算机学院召开5G与5G物联网专场讲座

原标题&#xff1a;计算机学院召开5G与5G物联网专场讲座 为增强计算机科学与技术专业学子的专业认知&#xff0c;拓展专业视野&#xff0c;增强对5G新技术及5G物联网的了解&#xff0c;11月19日下午&#xff0c;计算机学院计算机科学与技术教研室吴方老师为18级计算机科学与技术…

5G商用的赋能应用阐述,5G物联网应用案例

在5G商用近两年&#xff0c;我们选择深入产业链&#xff0c;对重点行业的企业进行了深入的采访&#xff0c;撰写了一系列关于5G应用案例的文章&#xff0c;让你真正感受到5G是什么&#xff0c;最终制作成行业经典案例集。用微信和远在大洋彼岸的朋友视频通话&#xff0c;视频清…

华为名师拆书直播 | 5G物联网及NB-IoT技术详解

拆书直播是ICT学堂物联网学院全新的直播栏目&#xff0c;老师会从热门优质的物联网技术书籍中挑选&#xff0c;进行拆解学习&#xff0c;并在书籍本身的章节内容上&#xff0c;优化课程设计&#xff0c;外延知识。通过直播讲解的形式把书籍中的精华知识分享给大家。 非常建议平…

5G物联网如何推动边缘计算

低延迟是一项大业务。根据今年早些时候发布的数据&#xff0c;由 5G 连接支持的强大物联网技术配对有望快速增长。据美联社报道&#xff0c; 5G 物联网市场将以每年超过 50% 的速度增长&#xff0c;到 2025 年将占据 62.85 亿美元的市场份额。对于一个明年有望突破 7 亿美元的行…

5G物联网数据网关助力工业企业转型升级

随着工业向智能化、网络化、数字化发展&#xff0c;工业企业的转型升级势在必行。而计讯物联5G物联网数据网关TG463的功能设计足以为先进工业企业实现数据互联共享与精准分析&#xff0c;塑造基于数据驱动的业务模式、管理模式和商业模式&#xff0c;实现多业务系统协同和全系统…