1

我正在使用 VS2019,Qt 5.15.2

我在以下目录entryList中使用类的方法:QDir

在此处输入图像描述

entryList带有参数的方法的以下行为QDir::NoDotAndDotDot很奇怪:

tTe 以下示例不言自明:我的代码:


    LOG( INFO ) << "entryList with no parameter";
    foreach( auto elementName, p_dir.entryList() )
    {
        LOG( INFO ) << "elementName : " << elementName.toStdString();
    }

    LOG( INFO ) << "entryList with QDir::NoDotAndDotDot";
    foreach( auto elementName, p_dir.entryList( QDir::NoDotAndDotDot ) )
    {
        LOG( INFO ) << "elementName : " << elementName.toStdString();
    }

输出如下:

2021-04-01-10:29:33,482724 | INFO            | entryList with no parameter | xxxxxxxxx.cpp->RecursiveProcessingFilesFinder:58
2021-04-01-10:29:33,482773 | INFO            | elementName : . | xxxxxxxxx.cpp->RecursiveProcessingFilesFinder:61
2021-04-01-10:29:33,482805 | INFO            | elementName : .. | xxxxxxxxx.cpp->RecursiveProcessingFilesFinder:61
2021-04-01-10:29:33,482844 | INFO            | elementName : ABDOMEN | xxxxxxxxx.cpp->RecursiveProcessingFilesFinder:61
2021-04-01-10:29:33,482876 | INFO            | elementName : CHEST | xxxxxxxxx.cpp->RecursiveProcessingFilesFinder:61
2021-04-01-10:29:33,482913 | INFO            | elementName : CSPINE | xxxxxxxxx.cpp->RecursiveProcessingFilesFinder:61
2021-04-01-10:29:33,482944 | INFO            | elementName : ELBOW | xxxxxxxxx.cpp->RecursiveProcessingFilesFinder:61
2021-04-01-10:29:33,482985 | INFO            | elementName : FOOT | xxxxxxxxx.cpp->RecursiveProcessingFilesFinder:61
2021-04-01-10:29:33,483019 | INFO            | elementName : HAND | xxxxxxxxx.cpp->RecursiveProcessingFilesFinder:61
2021-04-01-10:29:33,483053 | INFO            | elementName : KNEE | xxxxxxxxx.cpp->RecursiveProcessingFilesFinder:61
2021-04-01-10:29:33,483090 | INFO            | elementName : LSPINE | xxxxxxxxx.cpp->RecursiveProcessingFilesFinder:61
2021-04-01-10:29:33,483123 | INFO            | elementName : PELVIS | xxxxxxxxx.cpp->RecursiveProcessingFilesFinder:61
2021-04-01-10:29:33,483155 | INFO            | elementName : RIB | xxxxxxxxx.cpp->RecursiveProcessingFilesFinder:61
2021-04-01-10:29:33,483186 | INFO            | elementName : SHOULDER | xxxxxxxxx.cpp->RecursiveProcessingFilesFinder:61
2021-04-01-10:29:33,483221 | INFO            | elementName : SKULL | xxxxxxxxx.cpp->RecursiveProcessingFilesFinder:61
2021-04-01-10:29:33,483252 | INFO            | elementName : TSPINE | xxxxxxxxx.cpp->RecursiveProcessingFilesFinder:61
2021-04-01-10:29:33,483284 | INFO            | entryList with QDir::NoDotAndDotDot | xxxxxxxxx.cpp->RecursiveProcessingFilesFinder:64

我不明白为什么,如果我使用过滤器QDir::NoDotAndDotDot,entryList 输出现在是空的???

4

1 回答 1

2

你的问题是:

我不明白为什么,如果我使用过滤器QDir::NoDotAndDotDot

的官方文件QDir::entryList表明

如果目录不可读、不存在或没有符合规范的内容,则返回一个空列表。

当你在做p_dir.entryList()的时候,默认过滤器NoFilter是正常的,所以显示所有东西是正常的。正常行为NoFilter意味着显示所有内容,包括.(Dot) 和..(DotDot)

当你在做p_dir.entryList( QDir::NoDotAndDotDot )的时候,过滤器被设置为QDir::NoDotAndDotDot这意味着"Do not list the special entries "." and ".."."(参见QDir::Filters 的描述,然后没有更多的匹配过滤器的规范,因此它输出一个空列表。

要显示没有 line 的所有内容entryList with QDir::NoDotAndDotDot...,您应该执行以下操作:

foreach( auto elementName, p_dir.entryList( QDir::AllDirs | QDir::Files |QDir::NoDotAndDotDot )
{
    LOG( INFO ) << "elementName : " << elementName.toStdString();
}

这允许显示:

  • QDir::AllDirs- 列出所有目录;即不要将过滤器应用于目录名称。
  • QDir::Files- 列出文件。
  • QDir::NoDotAndDotDot- 不要列出特殊条目“。” 和 ”..”。
于 2021-04-01T11:08:29.720 回答