glob 只给出匹配模式的第一个文件

glob in giving only first file that matched pattern

我想在 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 编译。

根据评论...一般来说,可执行文件的所有命令行参数都将由 shell 传递给您的应用程序之前进行解释。因此,给定文件层次结构...

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

命令...

Image ./Images/*

实际上会导致...

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

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

Image './Images/*'