Я столкнулся с проблемой при обновлении с #include <experimental/filesystem>
до #include <filesystem>
. Похоже, что метод std::filesystem::path::wstring
не возвращает ту же строку, что и в experimental::filesystem
. Я написал следующую небольшую тестовую программу с включенным результатом вывода.
#include <iostream>
#include <filesystem>
#include <experimental/filesystem>
namespace fs = std::filesystem;
namespace ex = std::experimental::filesystem;
using namespace std;
int main()
{
fs::path p1{ L"C:\\temp/foo" };
wcout << "std::filesystem Native: " << p1.wstring() << " Generic: " << p1.generic_wstring() << endl;
ex::path p2{ L"C:\\temp/foo" };
wcout << "std::experimental::filesystem Native: " << p2.wstring() << " Generic: " << p2.generic_wstring() << endl;
}
/* Output:
std::filesystem Native: C:\temp/foo Generic: C:/temp/foo
std::experimental::filesystem Native: C:\temp\foo Generic: C:/temp/foo
*/
Согласно https://en.cppreference.com/w/cpp/filesystem/path/string:
Возвращаемое значение
Внутреннее имя пути в формате родного пути, преобразованное в указанный тип строки.
Программа работала в Windows 10 и была скомпилирована с Visual Studio 2017 версии 15.8.0. Я бы ожидал, что родной путь будет C:\temp\foo
.
Вопрос: Это ошибка в std::filesystem::path
?