Linux搜索指定文件夹并打开最符合搜索目标名称的文件

先大致参考

关于Linux相对路径的问题:http://blog.csdn.net/yongqiangyue/article/details/7707854

关于搜索Linux文件目录下文件http://myswirl.blog.163.com/blog/static/513186422010102495152843/

open、openat函数参考UNIX环境高级编程和http://blog.csdn.net/shanshanpt/article/details/39927553与http://blog.csdn.net/wang1902568721/article/details/47796173

这里面说与目标文件名“最符合”,可自由定义最符合的条件:相同、包含、通配符匹配之类都可以,大不了加个匹配算法

#include <stdio.h>  
#include <sys/types.h>  
#include <dirent.h>  
#include <sys/stat.h>  
#include <fcntl.h>  
#define BufferSize 16  

/*  
*搜索"data"文件夹下的文件,如果有文件名为fileName的文件则获得该文件的路径,存入字符串file中  
*/  
int fileDescreption(char* filePath, char *fileName){  
    DIR *dp;  
    struct dirent *dirp;  
    if((dp = opendir(filePath)) == NULL){  
        printf("Can't open filePath:%s\n", filePath);  
        return -1;  
    }  
  
    while((dirp = readdir(dp)) != NULL){  
        if(strcmp(dirp->d_name,fileName) == 0){  
            fileName = dirp->d_name;  
            printf("fd:%s\n", fileName);  
            break;  
        }  
    }  
    closedir(dp);  
    char file[256] = {0};  
    sprintf(file,"%s%s%s",filePath,"/",fileName);//最终file为data/test,这里也可以改成调用openat函数  
    int fd = open(file,O_RDONLY);  
    return fd;  
}  
  
void readFile(int fd){  
    if(fd == -1){  
        perror("open file");  
        return;  
    }  
    char buf[BufferSize] = {0};  
    while(read(fd,buf,sizeof(buf)) > 0){  
          
    }  
    buf[BufferSize-1] = '\0';  
    printf("%s",buf);  
    close(fd);  
}  
  
int main(){  
    char *fileName = "test";  
    char *filePath = "data";  
    readFile(fileDescreption(filePath,fileName));  
}  


原程序放在“Server”文件夹下,里面除了原程序外还有“data”文件夹,“data”文件夹下有文件“test”,

运行结果:打印出”test”文件中的内容。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值