командная строка — эквивалент os.path в C ++ без Qt?

Мне нужно установить каталог, а затем прочитать все имена файлов внутри и сохранить весь путь в переменной. Мне нужно использовать эту переменную позже, чтобы открыть файл и прочитать его. Я не хочу использовать QDir за это. Я видел второй ответ на вопрос Вот. я могу использовать boost/filesystem.hpp (Я считаю, что это не нужно загружать отдельно). Но проблема в том, что исполнение будет выглядеть так:

$ g++ -o test test.cpp -lboost_filesystem -lboost_system
$ ./test

Моя первая строка для создания исполняемого объекта уже сложна из-за библиотек OpenCV, и я не хочу добавлять к этому. Я хочу, чтобы они были простыми (следующая строка плюс все, что хочет OpenCV):

g++ -o test test.cpp

Есть ли способ сделать это?

Это код Python, для которого я хочу написать код C ++:

root_dir = 'abc'
img_dir = os.path.join(root_dir,'subimages')

img_files = os.listdir(img_dir)
for files in img_files:
img_name = os.path.join (img_dir,files)
img = cv2.imread(img_name)

2

Решение

Ваш выбор — использовать boost, QDir, свернуть свой собственный или использовать более новый компилятор, который принял некоторые функции TR2, подготовленные для C ++ 17. Ниже приведен пример, который примерно должен перебирать файлы независимо от системы с помощью функции C ++ 17.

#include <filesystem>
namespace fs = std::experimental::filesystem;
...
fs::directory_iterator end_iter;
fs::path subdir = fs::dir("abc") / fs::dir("subimages");
std::vector<std::string> files;

for (fs::directory_iterator dir_iter(subdir); dir_iter != end_iter; dir_iter++) {
if (fs::is_regular_file(dir_iter->status())) {
files.insert(*dir_iter);
}
}
3

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

Для Linux или POSIX ….

Вы можете использовать низкий уровень nftw (3) или же opendir (3) & READDIR (3) и т.д. … Конечно, вам придется иметь дело с грязными деталями (пропуская . & .. записи, сборка пути к файлу из записи и пути к каталогу, обработка ошибок и т. д.). Вам также может понадобиться стат (2).
Вы должны прочитать Расширенное программирование в Linux & Системные вызовы (2) чтобы получить более широкое представление.

Для других ОС (особенно Windows) вам нужны другие низкоуровневые функции.

Кстати, вы можете посмотреть в исходный код Qt для QDir

Вы также можете рассмотреть возможность использования ПОКО

1

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