2013-09-10 3 views
1

Мне нужно указать все каталоги в некоторых папках в моем приложении. Для этого я написал что-то такого рода: (., И я знаю, что это должно быть -> вместо знака есть)проверить, если узел представляет каталог в C++

std::vector<std::string> FirefoxCleaner::_getDirs(std::string path) { 
    std::vector<std::string>* dirs = new std::vector<std::string>(); 
    std::cout<<DT_DIR<<std::endl; 
    DIR *dir = opendir(path.c_str()); 
    struct dirent *entry = readdir(dir); 
    while (entry != NULL) { 
     std::cout<<entry->d_name<<": "<<entry->d_type<<std::endl;   
     if (entry->d_type == DT_DIR) { 
      std::cout<<entry->d_name<<std::endl; 
      //dirs.push_back(entry->d_name); 
     } 
     entry = readdir(dir); 
    } 

    closedir(dir); 
    return *dirs; 
} 

Я прокомментировал push_back линии, потому что не нужен на данный момент , Тем не менее, хотя результат этого метода:

16 
.: 24 
..: 24 
extensions: 24 
lidv7pj1.default: 24 
v0kmwatk.defaultextensions.ini: 24 

Как вы можете себе представить, расширения и lidv7pj1.default фактически являются каталогами. Как я могу это определить?

ответ

0

d_type запись битовая, так что вам нужно, чтобы проверить его с помощью &:

if (entry->d_type & DT_DIR) 

должен решить эту проблему.

+0

Если все записи имеют 24, тогда все они имеют точно такое же представление бит, что и файл ini также рассматривается как каталог: / – Moby04

Смежные вопросы