【问题标题】:check if node represents directory in c++检查节点是否代表C++中的目录
【发布时间】:2013-09-14 07:33:32
【问题描述】:

我必须列出我的应用程序中某些文件夹中的所有目录。为此,我写了这样的东西:

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

您可以想象 extensions 和 lidv7pj1.default 实际上是目录。如何确定?

【问题讨论】:

    标签: c++ windows directory file-type


    【解决方案1】:

    d_type 条目是位掩码,因此您需要使用&amp; 进行检查:

    if (entry->d_type & DT_DIR)
    

    应该解决这个问题。

    【讨论】:

    • 如果所有记录都有 24 条,那么它们都具有完全相同的位表示,所以现在 ini 文件也被视为目录:/
    猜你喜欢
    • 1970-01-01
    • 2023-01-04
    • 2011-08-31
    • 1970-01-01
    • 2013-05-19
    • 1970-01-01
    • 2022-01-07
    • 2017-06-03
    • 2013-11-04
    相关资源
    最近更新 更多