I\'m using C and sometimes I have to handle paths like
Is there a way to ch
Easier to try FileInfo.isDir() in qt
In Win32, I usually use PathIsDirectory and its sister functions. This works in Windows 98, which GetFileAttributes does not (according to the MSDN documentation.)
On Windows you can use GetFileAttributes on an open handle.
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++14
namespace fs = std::experimental::filesystem;
Additional implemented checks are listed in section "File types".
stat() will tell you this.
struct stat s;
if( stat(path,&s) == 0 )
{
if( s.st_mode & S_IFDIR )
{
//it's a directory
}
else if( s.st_mode & S_IFREG )
{
//it's a file
}
else
{
//something else
}
}
else
{
//error
}
Call GetFileAttributes, and check for the FILE_ATTRIBUTE_DIRECTORY attribute.