Я использую C, и иногда мне приходится обрабатывать пути, такие как
- C:\Whatever
- C:\Whatever\
- C:\Whatever\некий файл
Есть ли способ проверить, является ли данный путь каталогом или данный путь является файлом?
Я использую C, и иногда мне приходится обрабатывать пути, такие как
Есть ли способ проверить, является ли данный путь каталогом или данный путь является файлом?
Вызвать GetFileAttributes и проверить атрибут FILE_ATTRIBUTE_DIRECTORY.
stat() сообщит вам об этом.
struct stat s;
if( stat(path,&s) == 0 )
{
if( s.st_mode & S_IFDIR )
{
//it a directory
}
else if( s.st_mode & S_IFREG )
{
//it a file
}
else
{
//something else
}
}
else
{
//error
}
В Win32 я обычно использую PathIsDirectory и его сестринские функции. Это работает в Windows 98, которые отсутствуют в GetFileAttributes (в соответствии с документацией MSDN.)
С С++ 14/С++ 17 вы можете использовать независимую от платформы is_directory()
и is_regular_file()
из библиотека файловой системы.
#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.
}
В С++ 14 используйте std::experimental::filesystem
.
#include <experimental/filesystem> // C++14
std::experimental::filesystem::path path(pathString);
В разделе Типы файлов доступно больше проверок.
В Windows вы можете использовать GetFileAttributes на открыть дескриптор.
Если вы используете CFile
, вы можете попробовать
CFileStatus status;
if (CFile::GetStatus(fileName, status) && status.m_attribute == 0x10){
//it directory
}
Легче попробовать FileInfo.isDir() в qt