Какой самый дешевый способ узнать, относится ли путь к папке или файлу в c ++? - PullRequest
1 голос
/ 27 января 2012

Я работаю с обработчиком наложения расширения оболочки, и мне будет передан путь, который, как я знаю, является допустимым, но я не знаю, папка это или файл.Эту операцию можно вызывать относительно часто, поэтому я хочу определить, является ли это файл или папка как можно дешевле.Как использовать C ++ (для моих требований подходит Windows), как мне лучше всего это сделать?

Ответы [ 6 ]

5 голосов
/ 27 января 2012

GetFileAttributes () предоставит эту информацию:

const DWORD result = GetFileAttributes("C:\\path\\x");

if (INVALID_FILE_ATTRIBUTES == result)
{
    std::cerr << "Error: " << GetLastError() << "\n";
}
else if (FILE_ATTRIBUTE_DIRECTORY == (result & FILE_ATTRIBUTE_DIRECTORY))
{
    std::cout << "Is directory\n";
}
else
{
    std::cout << "Is file\n";
}
3 голосов
/ 27 января 2012

Я бы рекомендовал использовать is_directory из библиотеки Boost's Filesystem ...

is_directory( "foo" )
1 голос
/ 27 января 2012

Используйте один из вариантов stat и проверьте бит st_mode.

0 голосов
/ 27 января 2012

Существует также Shlwapi (Shell API) PathIsDirectory.

0 голосов
/ 27 января 2012

Если у вас все в порядке с использованием классов Windows, просто используйте это

Directory::Exists(path)

Если true, то у вас есть папка.Аналогичным образом используйте

File::Exists(path)

, если хотите определить, является ли путь файлом или нет.

0 голосов
/ 27 января 2012

Для этого есть семейство функций stat (), которые возвращают метаданные о файле / каталоге, включая его тип: http://msdn.microsoft.com/en-us/library/14h5k7ff.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...