В Win32 я обычно использую PathIsDirectory и его сестринские функции. Это работает в Windows 98, которые отсутствуют в GetFileAttributes (в соответствии с документацией MSDN.)
#include <filesystem> // C++17 (or Microsoft-specific implementation in C++14)
std::string pathString = "/my/path";
std::filesystem::path path(pathString); // Construct the path from a string.
if (path.is_directory()) { // Using the non-throwing overload.
// Process a directory.
}
if (path.is_regular_file()) { // Using the non-throwing overload.
// Process a regular file.
}