zoukankan      html  css  js  c++  java
  • linux 下按照文件名模糊查找文件

    fnmatch

    int fnmatch(const char *pattern, const char *string, int flags);
    

    参数说明

    FNM_NOESCAPE
    如果这个标志设置了,处理反斜杠为普通字符,而不是转义字符。
    FNM_PATHNAME
    如果这个标志设置了,string 里的斜杠只匹配 pattern 里的斜杠,它不能匹配星号(*)或问号(?)元字符,也不能匹配包含斜杠的中括号表达式([])
    FNM_PERIOD
    如果这个标志设置了,string 里的起始点号必须匹配 pattern 里的点号。一个点号被认为是起始点号,如果它是string 第一个字符,或者如果同时设置了 FNM_PATHNAME,紧跟在斜杠后面的点号。
    FNM_FILE_NAME
    这是 FNM_PATHNAME 的 GNU 同义语。
    FNM_LEADING_DIR
    如果这个标志(GNU 扩展)设置了,模式必须匹配跟随在斜杠之后的 string 的初始片断。这个标志主要是给 glibc 内部使用并且只在一定条件下实现。
    FNM_CASEFOLD
    如果这个标志(GNU 扩展)设置了,模式匹配忽略大小写。

    返回值

    0:string 匹配 pattern;
    FNM_NOMATCH:没有匹配;或者其它非零值,如果出错。

    示例

    示例代码如下:

    #include <fnmatch.h>
    #include <stdio.h>
    #include <sys/types.h>
    #include <dirent.h>
    #include <vector>
    #include <string>
    #include <iostream>
    
    using namespace std;
    
    
    vector<string> WildcardSearch(const char* pattern,const char* filePath)
    {
    	vector<string> res;
    	struct dirent *entry;
    	DIR *dir;	
    	int ret;
    
    	dir = opendir(filePath);
    	if(dir != NULL)
    	{
    		while((entry = readdir(dir)) != NULL)
    		{
    			ret = fnmatch(pattern,entry->d_name,FNM_PATHNAME | FNM_PERIOD);
    			if(ret == 0)
    			{
    				res.push_back(entry->d_name);				
    			}
    			else
    			{
    				continue;
    			}
    		}
    	
    	}
    
    	closedir(dir);
    	return res;
    }
    
    
    int main(int argc,char*argv[])
    {
    	vector<string> tmp;
    	char* pattern = argv[1];
    	char* path = argv[2];
    	
    	tmp = WildcardSearch(pattern,path);
    
    	for(int i=0;i<tmp.size();i++)
    		cout<<tmp[i]<<endl;
    
    	return 0;
    }
    

    例如:

    ./test "2018-*.bmp" ./path
    
  • 相关阅读:
    理解消息循环和窗口过程(转)
    对话框和控件编程(转)
    俄罗斯方块
    男生女生配(抽屉原理)
    翻转吧,字符串
    数塔
    Pseudoprime numbers伪素数(快速幂+判定素数)
    shǎ崽 OrOrOrOrz
    As Easy As A+B
    求素数(筛选法)
  • 原文地址:https://www.cnblogs.com/chay/p/11353577.html
Copyright © 2011-2022 走看看