wxl756617397 发表于 2020-10-26 11:14:44

遍历文件问题

本帖最后由 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={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={0};
                           // printf("%s\n",entry->d_name);
                                                    sprintf(buf,"%s/%s",path,entry->d_name);
                                                    printf("%s\n",buf);
                            char buf1, *pw;
                            char buf2;
                            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).删除呀

wxl756617397 发表于 2020-10-26 11:16:44

这个输出的时候如何把(null).未找到的行输出的这些(null).删除呀

风过无痕1989 发表于 2020-10-26 11:34:31

你的 dirent 结构体没有 d_type 成员,23行 if(entry->d_type==4) 报错

wxl756617397 发表于 2020-10-26 11:48:20

风过无痕1989 发表于 2020-10-26 11:34
你的 dirent 结构体没有 d_type 成员,23行 if(entry->d_type==4) 报错

这个是自带的不会报错啊

wxl756617397 发表于 2020-10-26 11:50:11

wxl756617397 发表于 2020-10-26 11:48
这个是自带的不会报错啊

dirent.h里是包涵的

风过无痕1989 发表于 2020-10-26 13:36:14

wxl756617397 发表于 2020-10-26 11:48
这个是自带的不会报错啊

你自己看吧

页: [1]
查看完整版本: 遍历文件问题