为我的程序的下一步寻找一些帮助。
该程序现在所做的是询问用户他们正在寻找哪种类型的文件。一旦用户回答它,然后搜索程序所在的文件夹并找到扩展名与请求类型匹配的所有文件。然后,它会列出所有匹配的文件,旁边有一个随着搜索迭代的数字。
我想要做的是让用户只需输入与他们要打开的文件相对应的数字,然后打开它。
我现在拥有的是:
#include <iostream>
#include <filesystem>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
using namespace std::tr2::sys;
//Checks for matching extensions
bool ends_with(std::string& file, std::string& ext)
{
return file.size() >= ext.size() && // file must be at least as long as ext
// check strings are equal starting at the end
std::equal(ext.rbegin(), ext.rend(), file.rbegin());
}
//Checks for matching programs
bool program_match(std::string& file, std::string& reqFile)
{
return std::equal(reqFile.begin(), reqFile.end(), file.begin());
}
void wScan( path f, unsigned i = 0 )
{
directory_iterator d( f );
directory_iterator e;
vector<string>::iterator it2;
std::vector<string> extMatch;
std::vector<string> testMatch;
//loop that populates the vector of matches
for( ; d != e; ++d )
{
string file = d->path();
string ext = ".docx";
if(ends_with(file, ext))
{
extMatch.push_back(file);
}
}
int preI = -1;
for(it2 = extMatch.begin(); it2 != extMatch.end(); it2++)
{
preI += 1;
cout << preI << ". " << *it2 << endl;
}
cout << "Enter the number of your choice (or quit): ";
int fSelection;
cin >> fSelection;
//test match for full file match
for( ; d != e; ++d )
{
string file = d->path();
string reqFile = extMatch[fSelection];
if(program_match(file, reqFile))
{
testMatch.push_back(file);
}
}
for(it2 = extMatch.begin(); it2 != extMatch.end(); it2++)
{
cout << *it2 << endl;
}
}
int main()
{
string selection;
cout << "0. Microsoft word \n1. Microsoft Excel \n2. Visual Studio 11 \n3. 7Zip \n4. Notepad \n Enter the number of your choice (or quit): ";
cin >> selection;
path folder = "..";
if (selection == "0")
{
wScan ( folder );
}
else if...
}
我现在拥有的是另一个 for 循环,它再次遍历文件并提取所有与请求匹配的文件。然后它打印出该文件的名称。没有理由这样做,这只是一个测试,看看我的搜索方法是否会找到我正在寻找的文件。
我想知道找到文件后如何打开文件。我已经阅读了有关 system() 的一些内容,但似乎建议不要这样做,并且无论如何我尝试它的方式都对我不起作用。
谢谢!