Моя основная проблема заключается в том, что этот кусок кода почти всегда выдает исключение:Портативное тестирование папок на C++?
bool DirectoryRange::isDirectory() const
{
struct stat s;
stat(ep->d_name, &s);
#if defined(__linux__)
if((S_ISDIR(s.st_mode) != 0) != (ep->d_type == DT_DIR))
{
throw std::logic_error("Directory is not directory");
}
#endif
return S_ISDIR(s.st_mode);
}
bool DirectoryRange::isFile() const
{
struct stat s;
stat(ep->d_name, &s);
#if defined(__linux__)
if((S_ISREG(s.st_mode) != 0) != (ep->d_type == DT_REG))
{
throw std::logic_error("File is not file");
}
#endif
return S_ISREG(s.st_mode);
}
Проверка значения Dirent не портативный, но получает правильный ответ; в то время как stat является неправильным, но переносимым.
Так как я могу проверить каталоги портативно, если stat не работает?
Попробуйте Boost.Filesystem. –
Незначительные педантичные мелочи здесь, но не все файловые системы имеют концепцию папок. В частности, мэйнфрейма нет. Надеюсь, вам никогда не понадобится это знать, но на всякий случай ... ну, вот оно. – Brad