Как я могу открыть каталоги, используя аналогичную функцию, такую ​​как opendir, но используя библиотеку файловой системы? - PullRequest
0 голосов
/ 17 апреля 2019

Как мне вывести список каталогов, используя аналогичную функцию, такую ​​как opendir, но используя библиотеку файловой системы из C ++?

Функция opendir из dirent открывает каталог, но мы не можем его увидеть, что нормально.

for (const auto & entry : fs::recursive_directory_iterator(dir))

По сути, это код, который я использую для циклического перемещения по каталогам.fs - это файловая система.

Теперь opendir фактически открывает каталог без вывода сообщений.Теперь, если у него недостаточно разрешений, он не может открыть каталог и вернется, такого каталога нет.(Я сам не писал эту функцию)

void SearchFiles(std::string Directory)
{
    DIR* pDir;

    if((pDir = opendir(Directory.c_str())) != NULL)
    {
        struct dirent* pEntry;

        /* print all the files and directories within directory */
        while((pEntry = readdir(pDir)) != NULL)
        {
            if(pEntry->d_type == DT_DIR)
            {
                std::string Name = pEntry->d_name;

                if(Name != "." && Name != "..")
                    SearchFiles(Directory + Name + '\\');
            }
            else if(pEntry->d_type == DT_REG)
            {
                g_vFiles.push_back(Directory + pEntry->d_name);
            }
        }

        closedir(pDir);
    }
    else
    {
        printf("No such directory: '%s'\n", Directory.c_str());
    }
}

Я не очень разбираюсь в приведенном выше коде, но да ...

НеВы уверены, насколько новой является библиотека файловой системы, но имеет ли она функцию или что-то еще, чтобы я мог сделать то, что она делает выше?

Потому что при использовании моего метода с кодом файловой системы, приведенным выше, он перечисляет все, даже те, которые яу меня нет прав доступа, я думаю.

Incase, которая не существует без использования файла dirent.h.Мне действительно нужно использовать *, чтобы сделать pDir?Разве я не могу просто написать DIR pDir, потому что указатель мне не совсем понятен.

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