首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Windows上使用C++/C创建全局函数

在Windows上使用C++/C创建全局函数
EN

Stack Overflow用户
提问于 2009-08-13 00:42:25
回答 4查看 12.3K关注 0票数 20

在Windows或C++中有没有一种流畅的方法来实现glob?

例如,myprogram.exe *.txt向我的程序发送了一个has...ARGV1=*.txt的ARGV列表。

我希望能够有一个函数(让我们叫它readglob),它接受一个字符串并返回一个字符串向量,每个字符串都包含一个文件名。

这样,如果我的目录中有文件a.txt b.txt c.txt,并且readglob得到一个参数*.txt,它就会返回上面的文件列表。

代码语言:javascript
复制
//Prototype of this hypothetical function.
vector<string> readglob(string);

真的存在这样的情况吗?

EN

回答 4

Stack Overflow用户

发布于 2009-08-13 00:56:04

这是非常特定于Windows的。我不知道你怎么会把它写成跨平台的。但我已经在Windows程序中使用过它,它对我来说运行得很好。

代码语言:javascript
复制
// Change to the specified working directory
string path;
cout << "Enter the path to report: ";
cin >> path;
_chdir(path.c_str());

// Get the file description
string desc;
cout << "Enter the file description: ";
cin >> desc;

// List the files in the directory
intptr_t file;
_finddata_t filedata;
file = _findfirst(desc.c_str(),&filedata);
if (file != -1)
{
  do
  {
    cout << filedata.name << endl;
    // Or put the file name in a vector here
  } while (_findnext(file,&filedata) == 0);
}
else
{
  cout << "No described files found" << endl;
}
_findclose(file);
票数 4
EN

Stack Overflow用户

发布于 2009-08-13 00:47:45

有关于在Boost::filesystem中使用它的讨论,但为了支持使用boost::regex,它被放弃了。

对于特定于win32的(MFC),可以使用CFileFind

票数 2
EN

Stack Overflow用户

发布于 2009-08-13 00:54:07

现在可能有更好的方法,但上次我不得不处理这个问题时,我最终将Henry Spencer's regex library静态链接到我的程序中(他的库是BSD许可的),然后我创建了一个包装类,将用户的glob表达式转换为正则表达式,以提供给正则表达式。如果愿意,您可以查看/抓取包装类here

一旦这些部分就位,最后要做的就是实际读取目录,并将每个条目名称传递给匹配函数,以查看它是否与表达式匹配。匹配的文件名,添加到向量中;不匹配的文件名则丢弃。使用DOS的_findfirst()和_findnext()函数读取目录是相当简单的,但是如果你想要一个更好的C++接口,我有一个portable wrapper类来做这件事。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1269480

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档