Найти и запустить программу, которая соответствует строке

Нужна помощь в следующем шаге моей программы.

Что программа делает сейчас, это спрашивает пользователя, какой тип файла они ищут. Как только пользователь отвечает на него, затем ищет папку, в которой находится программа, и находит все файлы с расширением, которое соответствует запрошенному типу. Затем он перечисляет все соответствующие файлы с номером рядом с ним, который повторяется с поиском.

Я хочу, чтобы пользователь просто вводил число, соответствующее файлу, который он хочет открыть, и открывал его.

Что у меня сейчас так:

#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 (), но, кажется, не советовал, и у меня не получилось так, как я все-таки попробовал.

Спасибо!

0

Решение

Предполагая, что ваш код будет работать только в Windows (на основе перечисленных программ), вы можете использовать ShellExecute функция. Чтобы использовать это, включите Windows.h и передайте программу и файл, который вы хотите открыть, функции:

#include <Windows.h>

int main()
{
char program[] = "VCExpress.exe";
char file[] = "main.cpp";
// opens file in program
ShellExecuteA(NULL, "open", program, file, NULL, SW_SHOWDEFAULT);
}

ShellExecute также позволяет открыть файл в программном обеспечении по умолчанию, связанном с расширением файла. Для меня в Visual C ++ также открыто следующее:

#include <Windows.h>

int main()
{
char file[] = "main.cpp";
// opens file in default program
ShellExecuteA(NULL, "open", file, NULL, NULL, SW_SHOWDEFAULT);
}

ShellExecute может выполнить программу с большим количеством опций; проверить документацию: http://msdn.microsoft.com/en-us/library/windows/desktop/bb762153%28v=vs.85%29.aspx

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]