当我只知道部分文件名时,我需要能够打开文件。我知道扩展名,但每次创建时文件名都不同,但第一部分每次都是相同的。
答案 0 :(得分:4)
您(可能)需要编写一些代码来搜索符合已知模式的文件。如果您想在Windows上执行此操作,则可以使用FindFirstFile
,FindNextFile
和FindClose
。在类Unix系统上,opendir
,readdir
和closedir
。
或者,您可能需要考虑使用Boost FileSystem来更轻松地完成工作。
答案 1 :(得分:0)
我认为你必须得到一个目录中的文件列表 - 这个[link]将帮助你。 之后,我认为获取特定文件名很容易。
答案 2 :(得分:0)
在类Unix系统上,您可以使用glob()
。
#include <glob.h>
#include <iostream>
#define PREFIX "foo"
#define EXTENSION "txt"
int main() {
glob_t globbuf;
glob(PREFIX "*." EXTENSION, 0, NULL, &globbuf);
for (std::size_t i = 0; i < globbuf.gl_pathc; ++i) {
std::cout << "found: " << globbuf.gl_pathv[i] << '\n';
// ...
}
return 0;
}
答案 3 :(得分:0)
使用Boost.Filesystem获取目录中的所有文件,然后应用正则表达式(tr1或Boost.Regex)以匹配您的文件名。
使用带有递归迭代器的Boost.Filesystem V2的Windows的一些代码:
#include <string>
#include <regex>
#include <boost/filesystem.hpp>
...
...
std::wstring parent_directory(L"C:\\test");
std::tr1::wregex rx(L".*");
boost::filesystem::wpath parent_path(parent_directory);
if (!boost::filesystem::exists(parent_path))
return false;
boost::filesystem::wrecursive_directory_iterator end_itr;
for (boost::filesystem::wrecursive_directory_iterator itr(parent_path);
itr != end_itr;
++itr)
{
if(is_regular_file(itr->status()))
{
if(std::tr1::regex_match(itr->path().file_string(),rx))
// Bingo, regex matched. Do something...
}
}
Directory iteration with Boost.Filesystem. // Getting started with regular expressions using C++ TR1 extensions // Boost.Regex