Подтвердить что ты не робот

Как я могу определить, является ли данный путь каталогом или файлом? (C/С++)

Я использую C, и иногда мне приходится обрабатывать пути, такие как

  • C:\Whatever
  • C:\Whatever\
  • C:\Whatever\некий файл

Есть ли способ проверить, является ли данный путь каталогом или данный путь является файлом?

4b9b3361

Ответ 1

Вызвать GetFileAttributes и проверить атрибут FILE_ATTRIBUTE_DIRECTORY.

Ответ 2

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
}

Ответ 3

В Win32 я обычно использую PathIsDirectory и его сестринские функции. Это работает в Windows 98, которые отсутствуют в GetFileAttributes (в соответствии с документацией MSDN.)

Ответ 4

С С++ 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);

В разделе Типы файлов доступно больше проверок.

Ответ 6

Если вы используете CFile, вы можете попробовать

CFileStatus status;
    if (CFile::GetStatus(fileName, status) && status.m_attribute == 0x10){
       //it directory
}

Ответ 7

Легче попробовать FileInfo.isDir() в qt