鱼C论坛

 找回密码
 立即注册
查看: 1210|回复: 5

[技术交流] 遍历文件问题

[复制链接]
发表于 2020-10-26 11:14:44 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 wxl756617397 于 2020-10-26 11:17 编辑

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "dirent.h"
#include <libgen.h>
#define XK_SERVICE_RSYNCD_MODEL_DIR  "/home/wxl/workspace/c"
//#define XK_SERVICE_RSYNCD_MODEL_DIR "/var/share/cfg/rsync/model/"
int search_dir(char *path)//查找path目录及其子目录下后缀为.conf的文件
    {
            DIR *dir=NULL;
            struct dirent *entry=NULL;
            if((dir=opendir(path))==NULL)//打开目录,返回该目录下的由目录和文件组成的列表
            {
                    printf("opendir failed\n");
                    return -1;
            }
            else
            {
                    while((entry=readdir(dir))!=NULL)//循环读取列表中目录(子目录)或文件的信息
                    {
                            if(strcmp(entry->d_name,".")==0||strcmp(entry->d_name,"..")==0)//过滤本地目录及上级目录的信息.
                                    continue;
                            if(entry->d_type==4)//子目录,递归继续遍历子目录
                                    {
                                            char pathbuf[1024]={0};
                                            sprintf(pathbuf,"%s/%s",path,entry->d_name);
                                            search_dir(pathbuf);
                                    }
                            else//文件
                                    {
                                            char *tmp=strrchr(entry->d_name,'.');
                                            if(tmp==NULL)
                                                    continue;
                                            if(strcmp(tmp,".conf")==0)
                                            {
                                                    char buf[1024]={0};
                           // printf("%s\n",entry->d_name);
                                                    sprintf(buf,"%s/%s",path,entry->d_name);
                                                    printf("%s\n",buf);
                            char buf1[300], *pw;
                            char buf2[300];
                            FILE *fp;
                            int len;
                            if(strcmp(entry->d_name,"rsync.conf")==0){
                             if ((fp = fopen(buf, "r")) == NULL)
                            {
                                printf("fail to read");
                                exit(1);
                            }
                            while (fgets(buf1, 300, fp) != NULL)
                            {

                                  pw=strstr(buf1,"path");
                                  printf("%s",pw);
                                  sprintf(buf2,"%s",basename(pw));
                                  printf("%s\n",buf2);
                            }
                            fclose(fp);
                           
                        }
                        }
                        }
                       
                    }
                    }
           
            return 0;
    }
int main()
{  
    char *path=NULL;
    search_dir(XK_SERVICE_RSYNCD_MODEL_DIR);
    return 0;
   
}


这个输出的时候如何把(null).未找到的行输出的这些(null).删除呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-10-26 11:16:44 | 显示全部楼层
这个输出的时候如何把(null).未找到的行输出的这些(null).删除呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-26 11:34:31 | 显示全部楼层
你的 dirent 结构体没有 d_type 成员,23行 if(entry->d_type==4) 报错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-26 11:48:20 | 显示全部楼层
风过无痕1989 发表于 2020-10-26 11:34
你的 dirent 结构体没有 d_type 成员,23行 if(entry->d_type==4) 报错

这个是自带的不会报错啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-26 11:50:11 | 显示全部楼层
wxl756617397 发表于 2020-10-26 11:48
这个是自带的不会报错啊

dirent.h里是包涵的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-26 13:36:14 | 显示全部楼层
wxl756617397 发表于 2020-10-26 11:48
这个是自带的不会报错啊

你自己看吧

遍历文件.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-12 21:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表