Нужно найти файл по расширению в известной директории. Для винды существует такое решение:
FindFirstFile("Some/Directory/Some/*.some");
А как такое же провернуть под Linux, ибо подход описанный выше не работает и не заработает в Linux. Уже имеется вот такой код:
cout << "Type path - ";
string path_to;
getline(cin, path_to);
cout << "Type filename - ";
string filename;
getline(cin, filename);
string result = path_to + "/" + filename;
FindFirstFile(result);//знаю, что другое что-то использовать нужно вот и спрашиваю.
Вчера начал изучать C++ после C#, объясните простым языком
В С++17 появился новый крутой инклюд для работы с файловой системой: <filesystem>
.
Им и воспользуйтесь.
Код ниже делает поиск непосредственно в выбранной папке, без подпапок. Если нужен рекурсивный поиск, замените directory_iterator
на recursive_directory_iterator
.
#include <exception>
#include <filesystem>
#include <iostream>
#include <string>
namespace fs = std::filesystem; // Чтобы не писать `std::filesystem` каждый раз
int main()
{
std::string directory_name = "some/directory";
std::string extension = ".ext";
try // Может быть исключение, например, если папки не существует
{
for (auto &p : fs::directory_iterator(directory_name)) // Для всех файлов в папке
{
if (!fs::is_regular_file(p.status()))
continue; // Пропускаем, если это не простой файл, а папка или что-то другое
std::string name(p.path().filename());
// Проверяем, что имя заканчивается нужным расширением
// В С++20 можно будет просто `bool match = name.ends_with(extension);`
bool match = !name.compare(name.size() - extension.size(), extension.size(), extension);
if (!match)
continue;
// Тут делаем с путем то, что нужно
std::cout << name << '\n';
}
}
catch (std::exception &e)
{
std::cout << "Error: " << e.what() << '\n';
}
}
Чтобы это работало в GCC, нужен флаг -std=c++17
(или -std=gnu++17
), и нужно подключить библиотеку -lstdc++fs
.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Пишу программу на C++ в Linux в среде NetBeansIDEХочу использовать #include <fillesystem>, чтобы ее использовать нужно добавить флаг -std=c++17 или -std=gnu++17
Пробовал отсеивать через if, но не получилосьПоможете реализовать?