C++:
Проверка существования директории
Как:
Начиная с C++17, у нас есть std::filesystem
, который облегчает жизнь при работе с файловой системой. Вот фрагмент кода для проверки наличия директории:
#include <iostream>
#include <filesystem>
int main() {
std::filesystem::path dir_path{"./some_directory"};
bool exists = std::filesystem::exists(dir_path);
if(exists) {
std::cout << "Директория существует." << std::endl;
} else {
std::cout << "Директория не существует." << std::endl;
}
return 0;
}
Пример вывода (если директория существует):
Директория существует.
Или (если директории не существует):
Директория не существует.
Погружение
До C++17 нам приходилось полагаться на платформоспецифические вызовы API или сторонние библиотеки. В API Windows мы могли использовать GetFileAttributes
и проверять, было ли возвращаемое значение INVALID_FILE_ATTRIBUTES
. В системах POSIX мы могли использовать функцию stat()
для аналогичной функциональности.
C++17 изменил правила игры с std::filesystem
. Он предоставляет кроссплатформенную поддержку и высокоуровневый интерфейс для взаимодействия с файловой системой. Функция exists()
- это простой способ проверки существования директории, но вы также можете использовать is_directory()
, если хотите не только подтвердить наличие, но и убедиться, что путь указывает на директорию, а не на файл.
Для альтернативных методов рассмотрите функции std::filesystem::status_known()
и std::filesystem::file_status
, чтобы обработать случаи, когда разрешения файлов или другие проблемы могут повлиять на вашу способность определить существование директории.
Смотрите также
Узнайте больше о операциях с файловой системой в C++:
- Документация std::filesystem
- Для исторического контекста и различий между версиями, смотрите Историю версий C++