Во-первых, стандартная библиотека C ++ не предоставляет таких функций для вывода списка файлов каталога. Для этого вы можете использовать библиотеки ускорения. Решить эту проблему не так-то просто. Чтобы это сделать, вам придется применить множество приемов. Я могу дать вам все возможные стартовые указатели.
Чтобы перенести этот код на другую ОС, вам может потребоваться добавить код конкретной ОС с помощью директив препроцессора #. Boost Liberay уже является кроссплатформенным.
Прежде всего вам нужно получить текущий путь к каталогу, в котором находится ваша программа:
Для этого вы можете использовать следующий код для ОС Windows
#include <iostream>
#include <direct.h>
int main(){
char *path = NULL;
path = _getcwd(NULL, 0); // or _getcwd
if (path != NULL)
std::cout << path;
}
Здесь переменная пути содержит адрес текущего каталога. Вы можете передать этот путь следующей функции, которая в дальнейшем будет использовать его для вывода списка файлов и каталогов. Для перечисления каталогов вы можете использовать библиотеки Boost http://www.boost.org/ < / а>
Затем вам нужно будет получить все файлы и папки, имеющиеся в текущем каталоге. Используйте для этого библиотеку Boost
Используйте этот пример кода с сайта boost http://www.boost.org/doc/libs/1_37_0/libs/filesystem/example/simple_ls.cpp
Затем создайте класс и сохраните полученный адрес и имена файлов с путем в его объектах. Вы можете сохранить весь указанный адрес в объекте типа dir[1].str[size], dir[2].str[size],...
so on. Теперь снова передайте все адреса папок, которые вы получили, чтобы повысить функцию и получить другие имена файлов. Все вышеперечисленное потребует много пропусков. Вы также можете получить список файлов для определенного расширения файла:
#define BOOST_FILESYSTEM_VERSION 3
#define BOOST_FILESYSTEM_NO_DEPRECATED
#include <boost/filesystem.hpp>
namespace fs = ::boost::filesystem;
// return the filenames of all files that have the specified extension
// in the specified directory and all subdirectories
void get_all(const fs::path& root, const string& ext, vector<fs::path>& ret)
{
if(!fs::exists(root) || !fs::is_directory(root)) return;
fs::recursive_directory_iterator it(root);
fs::recursive_directory_iterator endit;
while(it != endit)
{
if(fs::is_regular_file(*it) && it->path().extension() == ext) ret.push_back(it->path().filename());
++it;
}
}
Наконец, сравните имена файлов с тем, которое вы хотите запустить, и выполните его.
Проблему можно решить и многими другими методами, но я думаю, что будет хорошо для начала, и вы всегда можете улучшить свой код.
Ссылки:
- Как получить список файлов с определенным расширением в заданной папке
- http://www.boost.org/
Как получить список файлов в каталоге на C ++?
Надеюсь это поможет. Если вам нужна дополнительная помощь, не стесняйтесь спрашивать!
person
Priyank
schedule
29.04.2015