Эта программа:
#include <iostream>
#include <filesystem>
int main()
{
std::filesystem::path p1("c:\\");
std::filesystem::path p2("c:/");
if (p1.has_parent_path())
std::cout << "Parent path of " << p1 << " is " << p1.parent_path() << std::endl;
if (p2.has_parent_path())
std::cout << "Parent path of " << p2 << " is " << p2.parent_path() << std::endl;
}
Производит этот вывод:
Parent path of "c:\\" is "c:\\"
Parent path of "c:/" is "c:/"
(РЕДАКТИРОВАТЬ: возникла путаница по поводу использования косой черты, поэтому я обновил этот код, чтобы показать, что одно и то же происходит независимо от того, какие разделители пути вы используете в Windows)
Это не имеет смысла для меня. Как каталог может быть родителем самого себя? Какой смысл даже иметь функцию has_parent, если она никогда не вернет false?
Самое главное: если я пишу код, который рекурсивно просматривает дерево каталогов в поисках файла, каков наилучший/самый надежный способ определить, что я попал в корневую папку и должен остановиться?
(Я использую Visual Studio 2019 в языковом режиме С++ 17, если это имеет значение)
p.parentPath()
сp
, должна работать. Предположительно,has_parent_path()
изisolated_file.name
вернетfalse
. (Обе идеи не проверены). - person TripeHound   schedule 02.10.2019