仅给出与模式匹配的第一个文件的问题

时间:2018-07-20 15:04:03

标签: c++ glob

我想使用C ++中的glob.h获取文件夹中的文件列表。

考虑以下简单代码:

#include <iostream>
#include "glob.h"

using namespace std;

int main(int argc, char const *argv[])
{
    glob_t globResult;
    string filePath = argv[1];
    glob(filePath.c_str(),0,NULL,&globResult);
    cout<<"No. of files found:"<<globResult.gl_pathc<<endl;
    for(int i = 0; i < globResult.gl_pathc; i++)
    {
            cout << string(globResult.gl_pathv[i]) << endl;
    }
    return 0;
}

在以下文件的文件夹中:

Images\
    |- cat.jpeg
    |- dog.jpg
    |- rat.jpg

当我运行Image ./Images/*时,我只会得到cat.jpeg,而不是全部三个文件。

我在做什么错了?

使用g++ 6.3clang++ 5.0编译。

1 个答案:

答案 0 :(得分:2)

按照注释...可执行文件的所有命令行参数通常都将由外壳 解释,然后再传递给您的应用。因此,给定文件层次结构...

Images\
  |- cat.jpeg
  |- dog.jpg
  |- rat.jpg

命令...

Image ./Images/*

实际上会导致...

Image ./Images/cat.jpeg ./Images/dog.jpg ./Images/rat.jpg

因此,您代码中传递给glob的第一个参数将是./Images/cat.jpeg,因此,这将是唯一的匹配项。为了避免外壳扩展,只需引用arg ...

Image './Images/*'