我想使用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.3
和clang++ 5.0
编译。
答案 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/*'