How can I tell if a given path is a directory or a file? (C/C++)
With C++14/C++17 you can use the platform independent is_directory()
and is_regular_file()
from the filesystem library.
#include <filesystem> // C++17#include <iostream>namespace fs = std::filesystem;int main(){ const std::string pathString = "/my/path"; const fs::path path(pathString); // Constructing the path from a string is possible. std::error_code ec; // For using the non-throwing overloads of functions below. if (fs::is_directory(path, ec)) { // Process a directory. } if (ec) // Optional handling of possible errors. { std::cerr << "Error in is_directory: " << ec.message(); } if (fs::is_regular_file(path, ec)) { // Process a regular file. } if (ec) // Optional handling of possible errors. Usage of the same ec object works since fs functions are calling ec.clear() if no errors occur. { std::cerr << "Error in is_regular_file: " << ec.message(); }}
In C++14 use std::experimental::filesystem
.
#include <experimental/filesystem> // C++14namespace fs = std::experimental::filesystem;
Additional implemented checks are listed in section "File types".