c语言查询大全,c语言获取目录的列表-所有列表-当前目录-根据搜索值查询|时刻需...

利用C来获取某个目录下的所有目录及文档

控制参数 及返回值

1.是否是查询所有还是只查询当前目录

2.查询的后缀名

3.查询的名字中包含这个值(或者完全匹配)

4.是否将结果输出到某个文件中去(默认的文件路径 或写入参数)

4.返回类型 JSON格式  默认是数组格式

代码思维流程

利用 _findfirst 和 _findnext 这两个函数来循环读取目录里的目录或文档

需要掌握的知识:

---------------------------------------------------------------

strcat  字符串链接

strcpy 字符串复制

---------------------------------------------------------------

0x00000001是个啥?32位表示、十六进制表示

0x0000 0001首先他是个16进制的数字、

8进制的是0开头的、比如 077 他是八进制的、十进制的话就是63、7*8+7=63

0x0000 0001他表示一个32位的、

因为十六进制的一位有16种变化、四位的变化也是16种。

那么、想表示32位的数据、需要16进制的

bit 0000 0000 0000 0000 0000 0000 0000 0001

0x 0        0      0       0       0       0       0       1

0x开头的是16进制的数字、十六进制一位可以代表4bit 的数据

--------------------- ------------------------------------------

C语言下文件目录遍历通常会用到下面这些函数

_access()        /* 判断文件或文件夹路径是否合法 */

_chdir()     /* 切换当前工作目录 */

_findfirst()    /* 查找第一个符合要求的文件或目录 */

_findnext()     /* 查找下一个 */

_findclose()    /* 关闭查找 */

与此同时还会使用到 struct _finddata_t 结构体

struct _finddata_t  {

unsigned attrib;                       /* 表示文件的属性 */

time_t time_create;                 /* 表示文件创建的时间 */

time_t time_access;                 /* 表示文件最后访问的时间 */

time_t time_write;                   /* 表示文件最后写入的时间 */

_fsize_t size;                            /* 表示文件的大小 */

char name[FILENAME_MAX];       /* 表示文件的名称 */

};

文件属性(attrib)的值可以取下面的值:

#define _A_NORMAL 0x00000000 //未知

#define _A_RDONLY 0x00000001 //只读文件

#define _A_HIDDEN 0x00000002 //隐藏文件

#define _A_SYSTEM 0x00000004 //系统文件

#define _A_VOLID 0x00000008 //未知

#define _A_SUBDIR 0x00000010 //目录格式

#define _A_ARCH  0x00000020 //文档格式

在io.h文件中FILENAME_MAX 被定义为260

//其中定义的具体地址请看

---------------------------------------------------------------

打印十六进制的数据格式

printf("%x\n", j); //输出结果为: 2f

printf("%X\n", j); //输出结果为: 2F

printf("%#x\n", j); //输出结果为: 0x2f

printf("%#X\n", j); //输出结果为: 0X2F %#X推荐使用

---------------------------------------------------------------

一个可以打印所有文档及目录名称的例子--以后会更新更好的

#include

#include

#include

#include

#include

#include

#include

#include

main(){

int i = 0;

char file_path[50];

time_t start,end;

printf("请输入文件的绝对路径:\n");

scanf("%s",file_path );

start = time(NULL);

file_list(file_path);

end = time(NULL);

printf("runtime is:%f(s)\n",difftime(end,start));/*调用difftime函数,从start到end说经过的时间*/

return 0;

}

int file_list(char *file_path){

struct _finddata_t file;//定义结构体 file

long handle; //定义 资源类型 andle

int file_num = 1;//定义当前目录的第几个文件或目录

FILE *pf = NULL;

char temp_file_path[300];//目录的绝对路径的临时存放地址

strcpy(temp_file_path, file_path);

strcat(temp_file_path,"*.*");//这个地方可以 通过正则匹配来声明更多的参数和功能

printf("当前要打开的文件路径:%s\n",temp_file_path);

handle = _findfirst(temp_file_path,&file);//查找目录或文档 然后将结果 放入 ile中

//如果查询成功则 handle = 0;

if(handle == -1){

//没有查询到任何信息

return 0;

}else{

printf("当前目录%s的第%d个文件名字是:%s\n",file_path,file_num,file.name);

}

while (!(_findnext(handle, &file))){

file_num++;

printf("当前目录%s的第%d个文件名字是:%s\n",file_path,file_num,file.name);

printf("当前目录%s的第%d个文件类型是:%#x\n",file_path,file_num,file.attrib);

printf("-------------------\n");

if(file.attrib == _A_SUBDIR && file.name[0] != '.'){

//如果是目录的话

//继续调用自己再次 查询

//整理查询前要传递的参数

char son_file_path[300];

strcpy(son_file_path,file_path);

strcat(son_file_path,file.name);

strcat(son_file_path,"/");

printf("当前目录%s的第%d个儿子目录全路径是:%s\n",file_path,file_num,son_file_path);

file_list(son_file_path);

}

}

_findclose(handle);

}

结果将会打印所有的目录及文档

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值