С будущим C++ существует ли лучший способ игнорировать файлы с запросами, отличными от требуемых, чем те, которые показаны в нижеприведенном фрагменте кода?Лучший способ игнорировать файлы с другими расширениями при использовании эксперимента C++ <filesystem>?
Я изучаю экспериментатор C++ <filesystem>
(http://en.cppreference.com/w/cpp/experimental/fs) при написании простой программы, которая преобразует текстовые файлы из одного каталога в текстовый файл в другой каталог. Программа принимает входные и выходные каталоги с помощью аргументов командной строки. Необходимо обработать только файлы с определенными расширениями (например, .csv
, .txt
, ...). Выходные файлы должны иметь расширение .xxx
.
#include <filesystem>
namespace fs = std::tr2::sys; // the implementation from Visual Studio 2015
...
fs::path srcpath{ argv[1] };
fs::path destpath{ argv[2] };
...
for (auto name : fs::directory_iterator(srcpath))
{
if (!fs::is_regular_file(name))
continue; // ignore the non-files
fs::path fnameIn{ name }; // input file name
// Ignore unwanted extensions (here lowered because of Windows).
string ext{ lower(fnameIn.extension().string()) };
if (ext != ".txt" && ext != ".csv")
continue;
// Build the output filename path.
fs::path fnameOut{ destpath/fnameIn.filename().replace_extension(".xxx") };
... processing ...
}
Выглядит неплохо для меня. –
Это похоже на то, как это можно было бы сделать. Вы могли бы сделать это (возможно) немного лучше с чем-то вроде [boost :: filter_iterator] (http://www.boost.org/doc/libs/release/libs/iterator/doc/filter_iterator.html). Я хотел бы, чтобы кто-то реализовал [glob] (http://man7.org/linux/man-pages/man3/glob.3.html), используя стандартную библиотеку. – user2079303