PrafullaVedante Ответов: 1

Является ли класс "wdirectory_iterator" устаревшим в boost 1.62


Я нахожусь в процессе миграции моего кода проекта на более новую версию boost (1.62 с 1.38).

То, что я испытываю, - это класс общего назначения "wdirectory_iterator", отсутствующий в более новой версии. Это что, устарело ?? Какова альтернатива этому ?

Что я уже пробовал:

Попробовал поискать документацию. Но вмятина найти все что угодно.

1 Ответов

Рейтинг:
2

Jochen Arndt

Он был объединен в стандарт C++17: std::файловая система::directory_iterator - cppreference.com[^].

Если вы все еще хотите использовать реализацию Boost (а не компиляцию с поддержкой C++17), вы должны использовать более старую версию Boost или проверить, существует ли она по-прежнему, но требует включения определения.


PrafullaVedante

Спасибо за комментарий. У меня есть такой код, как следующий.

boost::файловая система::wdirectory_iterator dirEndIter;
для(тип Boost::файловая система::wdirectory_iterator ИТЭР(logParentDirectory); итер != dirEndIter; ++ИТЭР)
{
if(!boost::filesystem::is_regular_file(iter->status()))
{
продолжить;
}

std::tstring filePath = iter->string();

//Я использую этот "путь к файлу" для некоторой дальнейшей обработки
.
.
.
.
.
}

Как преобразовать его в соответствии с более новой реализацией boost.
Я пытаюсь следовать за вами. Правильно ли это ?

boost::файловая система::directory_iterator dirEndIter;
для(тип Boost::файловая система::объект класса directory_iterator ИТЭР(logParentDirectory); итер != dirEndIter; ++ИТЭР)
{
if(!boost::filesystem::is_regular_file(iter->status()))
{
продолжить;
}

std::tstring filePath = iter->path().generic_wstring();

//Я использую этот "путь к файлу" для некоторой дальнейшей обработки
.
.
.
.
.
}

PrafullaVedante

Основываясь на ваших комментариях, я внес два изменения в код.

1)изменен wdirectory_iterator на directory_iterator

2)Чтобы получить широкий путь к файлу char из итератора
Я использую

ИТЭР-&ГТ;путь().generic_wstring();

вместо

std::tstring filePath = iter->string();


Дайте мне знать, если я прав.

Jochen Arndt

Я не могу ответить на этот вопрос, не зная, какую реализацию STL вы используете (то есть какой компилятор, какая версия и какой вариант версии C++ используется). И даже тогда я не смогу это проверить, если у меня не будет этого компилятора.

Я предполагаю, что Windows, потому что другие системы часто используют std::string с кодировкой UTF-8. Тогда смотри https://docs.microsoft.com/en-us/cpp/standard-library/directory-iterator-class и еще https://docs.microsoft.com/en-us/cpp/standard-library/file-system-navigation.

PrafullaVedante

Я использую Visual Studio 2017.

Jochen Arndt

Directory_iterator ожидает аргументы класса path. Если вам нужно преобразование, вы можете явно создать аргумент path, как показано в примерах двух ссылок из моего предыдущего комментария.

В Windows пути (и класс path) всегда являются UTF-16 (wstring).