c语言搜索多层文件夹,c语言 遍历搜索文件夹(获取文件夹中所有内容)

需要用来存储文件各种信息的结构体:struct_finddata_t 及查找函数:_findfirst、_findnext和_fineclose。

[1] _finddata_t结构体

struct _finddata_t

{

unsignedattrib;

time_ttime_create;

time_ttime_access;

time_ttime_write;

_fsize_tsize;

charname[_MAX_FNAME];

};

unsigned atrrib:

它存储一个unsigned单元,用于表示文件的属性。文件属性是用位表示的,主要有以下一些:_A_ARCH(存档)、_A_HIDDEN(隐藏)、_A_NORMAL(正常)、_A_RDONLY(只读)、_A_SUBDIR(文件夹)、_A_SYSTEM(系统)。这些都是在中定义的宏,可以直接使用。既然是位表示,那么当一个文件有多个属性时,它往往是通过位或的方式,来得到几个属性的综合。例如只读+隐藏+系统属性,应该为:_A_HIDDEN| _A_RDONLY | _A_SYSTEM 。

time_t time_create:

这里的time_t是一个变量类型,用来存储时间的。time_create变量是用来存储文件的创建时间。

time_t time_access:

文件最后一次被访问的时间。

time_t time_write:

文件最后一次被修改的时间。

_fsize_t size:

文件的大小,表示文件的字节数。

char name[_MAX_FNAME]:

文件的文件名。这里的_MAX_FNAME是一个常量宏,它在头文件中被定义,表示的是文件名的最大长度。

如何把一个硬盘文件的文件信息“存到”这个结构体所表示的内存空间里去呢?这就要靠_findfirst、_findnext和_fineclose三个函数的搭配使用了。

[2] _findfirst函数

long _findfirst( char *filespec,struct _finddata_t *fileinfo );

返回值:

如果查找成功的话,将返回一个long型的唯一的查找用的句柄(就是一个唯一编号)。这个句柄将在_findnext函数中被使用。若失败,则返回-1。

参数:

filespec:标明文件的字符串,支持通配符。比如:*.c,则表示当前文件夹下的所有后缀为C的文件。

fileinfo :这里就是用来存放文件信息的结构体的指针。这个结构体必须在调用此函数前声明,不过不用初始化,只要分配了内存空间就可以了。函数成功后,函数会把找到的文件的信息放入这个结构体中。

[3] _findnext函数

int _findnext( long handle, struct_finddata_t *fileinfo );

返回值:

若成功返回0,否则返回-1。

参数:

handle:即由_findfirst函数返回回来的句柄。

fileinfo:文件信息结构体的指针。找到文件后,函数将该文件信息放入此结构体中。

[4] _findclose函数

int _findclose( long handle);

返回值:成功返回0,失败返回-1。

参数:

handle:即由_findfirst函数返回回来的句柄。

试例:编写一个查找文件夹下所有文件或文件夹路径的函数

#include

#include

#include

#include

usingnamespacestd;

#defineFILE_FLODER 0X0001 //子文件夹

#defineFILE_FILE0X0002//文件

longGetPathArr(conststring &ptStrPath,vector&strPathArr,shorttype )

{

if (ptStrPath.empty() || _access(ptStrPath.c_str(), 0) != 0)//判断路径是否存在

return(0);

if (!PathIsDirectory(ptStrPath.c_str()))//判断是否为文件夹

return(-1);

strPathArr.clear();

_finddata_tfileInfo;

stringstrSearch = ptStrPath + "\\*.*";//搜索文件夹下所有文件

longhandle = 0;

handle =_findfirst(strSearch.c_str(), &fileInfo);

if (-1 ==handle)

return(0);

while (0 ==_findnext(handle, &fileInfo))

{

if (stricmp(fileInfo.name,"..") == 0 || stricmp(fileInfo.name,".") == 0)//如果为上级目录或当前目录

continue;

if ((fileInfo.attrib&_A_SUBDIR) == _A_SUBDIR)//如果为文件夹

{

if(type == FILE_FLODER)

strPathArr.push_back(ptStrPath + "\\" + fileInfo.name);

}

if ((fileInfo.attrib&_A_ARCH) == _A_ARCH)//如果为文档

{

if(type == FILE_FILE)

strPathArr.push_back(ptStrPath + "\\" + fileInfo.name);

}

}

_findclose(handle);//关闭句柄

return(1);

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/526953.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

易语言取c盘文件夹中的文件被占用,win7系统怎么快速找出文件被什么进程占用|win7解除文件占用的方法...

‍‍很多时候我们想删除文件或文件夹的时候,会出现文件正在使用的提示导致文件无法删除,如果知道是什么程序在使用这个文件好,但多数时候我们并不知道是被什么程序占用,那么在win7系统怎么快速找出文件被什么进程占用呢&#xff1…

ncurses下c语言定位光标,C指针原理教程之Ncurses介绍

1、安装NcursesNcurses是一个能提供功能键定义(快捷键),屏幕绘制以及基于文本终端的图形互动功能的动态库。Ncurses是一个能提供基于文本终端窗口功能的动态库. Ncurses可以: 只要您喜欢,您可以使用整个屏幕 创建和管理一个窗口 使用8种不同的彩色 为您的程序提供鼠标支持 使用…

菜鸟linux的sed,Linux sed命令菜鸟入门

本文首先以一个简单的sed命令应用示例,说明如何使用sed命令进行文本处理,接着从sed命令的用法、工作原理、行地址模式以及sed命令支持的脚本命令详细介绍sed命令的用法。一个完整的sed命令使用简单示例现在有一个待处理文件test.txt,文件中包…

android xml 列表展示,Android中ListView实现展示列表数据

1、在activity_main.xml中添加一个ListViewxmlns:tools"http://schemas.android.com/tools"android:layout_width"match_parent"android:layout_height"wrap_content"android:orientation"vertical"tools:context"${relativePack…

android的证书链管理,Android手册X509证书链验证

我已在我的代码中实现了javax.net.ssl.X509TrustManager,因此我可以验证我的软件访问的自签名证书.但是,我仍然需要验证其他一些“标准”网站SSL证书.我使用CertPathValidator.validate()来做到这一点,但我刚刚意识到我传递的一个证书链(对于maps.googleapis.com)实际上并不包含…

lua android弹窗关闭,安卓精灵lua调用pm指令实现清除App缓存,举个栗子的说

今天刚接触这玩意,试着写点Demo玩玩, 功能要求能自动登陆,在登陆前要先清空游戏的缓存数据,不然游戏就自动登陆了(无法切到账号输入窗口)本想写图色脚本来实现吧,多种品牌的手机,多种模拟器,多种桌面主题&a…

android打印html页面,Android打印HTML文档

来源官网,总结用.WebView类在Android 4.4(API Level 19)中得到了更新,使得它可以打印HTML内容。该类允许我们加载一个本地HTML资源或者从网页下载一个页面,创建一个打印任务,并把它交给Android打印服务。1.[代码]如何构建一个HTML的字符串并将…

cocos android-1,Cocos2D-Android-1之源码详解:5.Box2dTest

Cocos2D-Android-1之源码详解:5.Box2dTest发布时间:2020-08-06 06:19:28来源:51CTO阅读:398作者:abab99package org.cocos2d.tests;import java.util.Iterator;import org.cocos2d.actions.UpdateCallback;import org.…

三星s10能升级android11,三星 S10+手机已在测试 Android 11 系统

IT之家2月25日消息 谷歌本月初发布了首个Android 11开发者预览版,首先面向Pixel手机,不过看起来三星已经在Galaxy S10 手机开始测试最新系统。IT之家从Geekbench数据库中获知,上面出现了运行Android R,型号为SM-G975F的三星Galaxy…

android 5. 蓝牙 mesh,蓝牙mesh组网

智能照明是智能家居的一个重要入口,传统照明方案存在布线复杂,控制单一等问题。搭配飞易通MESH组网模组替换传统方案,无需额外的布线。提供更智能的控制,更极致的用户体验。一、MESH应用领域:蓝牙5.0MESH是由SIG蓝牙联盟发布建立的…

android opencv 银行卡识别,NDK 开发之使用 OpenCV 实现银行卡号识别

前言在日常的开发中,我们有时会遇到添加银行卡的需求,这时候,产品可能会让你仿一下支付宝之类的相机扫描识别银行卡号。很多时候,做这样的需求会去找找稳定的第三方,本文通过 OpenCV 结合识别的需求带你分析如何实现银…

鸿蒙测试机型微博,华为多款机型开启鸿蒙尝鲜:微博已适配HarmonyOS小尾巴

日前,华为已经正式宣布,将于6月2日晚20点召开鸿蒙操作系统及华为全场景新品发布会,届时将正式发布鸿蒙OS正式版。同时,今天华为还开启了鸿蒙OS首批消费者尝鲜计划,其中正式版可参与机型包括Mate 40系列、Mate X2、Mate…

android今日头条刷新,仿今日头条刷新vector动画

一般的刷新动画是一个圈圈在转,而头条的比较特殊,直接上写好的效果图(一直不知道怎么把图片尺寸调小o(╯□╰)o)吧~刷新动画_.gif首先整个效果是通过SVG和vector来实现的,如果不是很了解,请看大佬的文章:SVG学习--Anim…

android懒加载单实例,【 Android 10 设计模式 】系列 -- 单例

前言由于源码分析的代码量比较大,大部分博客网站的内容显示页面都比较窄,显示出来的效果都异常丑陋,所以您也可以直接查看 《 Thinking in Android 》 来阅读这边文章,希望这篇文章能帮你梳理清楚 “ 单例模式 ”。一、概述1.1 什…

android资产目录,android – 从非目录设备中的资产文件夹复制数据库

我正在尝试从资产文件夹将数据库复制到设备.此代码在模拟器和根设备上正常工作.我只是想知道是否在无人看管的设备上创建任何问题,否则它会相同.private void StoreDatabase() {File DbFile new File("data/data/packagename/DBname.sqlite");if (DbFile.exists()) …

在html中标题字号一共有几种,HTML中常用的几种标签

在HTML中,标签是首要的,也是最重要的东西。一旦进入HTML,认识和理解标签是基本的需要,因为这是区分HTML代码与普通文本的分隔符。这些标签是用来显示文档中的普通文本或转化文本的指令的标签。什么是转化后的文本?要显…

html静态页面引用其他页面,Shtml完美解决静态页面内部调用其他页面(非Iframe、Object、Js方法)...

我想这个是所有前端工程师都会碰到的问题,在你做了很多页面,需要调用同一个头部或者底部的时候,需要嵌套一下,这个时候怎么办Iframe、Object、Js调用的方法就不讨论了,网上搜索一大堆,不过兼容性不好这里给…

鸿蒙手机如何录屏,安卓手机如何屏幕录制视屏?手机视频录制方法

安卓手机如何屏幕录制视屏?手机视频录制方法2018年12月17日 17:05作者:黄页编辑:黄页分享随着科技的不断进步发展,手机已经成为人类不可缺少的一种生活神器,人们已经不满足只是用来打打电话、发发短信那么简单了,手机的用途主要用来社交、娱乐…

html判断为空的函数,javascript怎么判断是否为空字符串?

JavaScript中可以使用if(typeof obj"undefined"||objnull||obj"")语句通过判断字符串的数据类型来判断字符串是否为空。判断字符串是否为空的方法函数:function isEmpty(obj){if(typeof obj "undefined" || obj null || obj "…

html或原生js是单一对应绑定的,原生js数据绑定

双向数据绑定是非常重要的特性 —— 将JS模型与HTML视图对应,能减少模板编译时间同时提高用户体验。我们将学习在不使用框架的情况下,使用原生JS实现双向绑定 —— 一种为Object.observe_(译注:现已废弃,作者写博客时为14年11月)&…