使用C++17filesystem遇到过的问题
中文路径问题
最近在使用C++17的filesystem时,发现它对中文的支持不太友好,输入中文路径时会抛出异常。如下代码:
#include <iostream>
#include<filesystem>
void checkFile(std::string path_str) {
std::filesystem::path p = std::filesystem::path(path_str);
if (std::filesystem::exists(p)) {
std::cout << "true" << std::endl;
}
}
int main()
{
std::string path_str = "D:/DeskTop/新建文件夹";
checkFile(path_str);
return 0;
}
异常如下图所示:
经过一段时间尝试之后,最终找到解决办法
#include <iostream>
#include<filesystem>
#include <windows.h>
#include <codecvt>
void checkFile(std::wstring path_str) {
std::filesystem::path p = std::filesystem::path(path_str);
if (std::filesystem::exists(p)) {
std::cout << "true" << std::endl;
}
}
int main()
{
std::string path_str = "D:/DeskTop/新建文件夹";
std::wstring_convert<std::codecvt_utf8<wchar_t>> converter;
std::wstring w_path_str = converter.from_bytes(path_str);
checkFile(w_path_str);
return 0;
}
以上代码可以正常编译运行:
需要注意的是,这里要关闭SDL检查:
第一次写博客,记录一下自己遇到的问题,如果有大佬有更好的办法,欢迎在评论区讨论。