Boost.Filesystem库提供了操作文件和目录的工具,以及识别它们的路径。
MCVE是: #include #include #include #include #include Mcve是: #include <iostream> #include <locale> #include <boost/filesystem.hpp> #include <boost/program_options.hpp> #include <boost/program_options/detail/utf8_codecvt_facet.hpp> int main() try { std::locale defLocale{}; auto converter = new boost::program_options::detail::utf8_codecvt_facet{}; auto customUtf8Locale = std::locale{ defLocale, converter}; std::locale::global(customUtf8Locale); std::cout << "Setting boost::filesystem::path::imbue locale..." << std::endl; boost::filesystem::path::imbue(customUtf8Locale); return 0; } catch(const std::exception& e) { std::cerr << "Exception " << e.what() << std::endl; return 1; } https://godbolt.org/z/n8ag4dhez 本简单的代码与静态编译和链接的Boost 1.86编译。 我使用附属物部署我的应用程序。 假设在多个Linux发行版上没有问题的工作:Redhat Enterprise Linux(RHEL)7.9+,CentOS 7.9+,Ubuntu 18.04+,Debian 10+,Suse Linux Enterprise Server(SLES)15,Oracle Linux 8,Amazon Linux 2,Amazon Linux 2,Amazon Linux 2,Amazon Linux 2,Amazon Linux 2, Amazon Linux 2023,Alma Linux 8+,Rocky Linux 8+,Linux Mint 20+。而且我没有任何(几乎)抱怨。 问题仅出现在CentOS 7.9+上(我在VM中复制问题)。 抛出了例外,在日志中,我可以看到: Setting boost::filesystem::path::imbue locale... Exception locale::facet::_S_create_c_locale name not valid 这是奇怪的事情,因为我的自定义语言环境是由默认构造的环境(Feeding“ c”语言名称给出相同结果)和自定义编码转换器的。我不用名称喂养任何地方。 为什么它失败了?以及我如何修复它? 我很难弄清楚这一点,因为这是在ubunbtu上建立的24.04,clang 18,然后部署在CentOS上,并设置了带有完整符号的调试会话,并且代码有点复杂。 reproducer:docker run --rm -i -t centos:7,然后: sed -i s/mirror.centos.org/vault.centos.org/g /etc/yum.repos.d/*.repo sed -i s/^#.*baseurl=http/baseurl=http/g /etc/yum.repos.d/*.repo sed -i s/^mirrorlist=http/#mirrorlist=http/g /etc/yum.repos.d/*.repo sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-* sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-* yum install -y git gcc-c++ make cmake boost boost-devel cat > test.cpp <<CPP #include <boost/filesystem.hpp> #include <boost/program_options.hpp> #include <boost/program_options/detail/utf8_codecvt_facet.hpp> #include <iostream> #include <locale> int main() try { std::locale defLocale{}; auto customUtf8Locale = std::locale( // defLocale // , new boost::program_options::detail::utf8_codecvt_facet{} // ); std::locale::global(customUtf8Locale); std::cout << "Setting boost::filesystem::path::imbue locale..." << std::endl; boost::filesystem::path::imbue(customUtf8Locale); } catch (std::exception const& e) { std::cerr << "Exception " << e.what() << std::endl; return 1; } CPP 现在建筑和跑步正常: g++ -std=c++11 test.cpp -lboost_{system,filesystem,program_options} 您欢迎您在问题中添加信息,以突出显示您在做什么不同。
使用 boost::filesystem 遍历目录而不抛出异常
我有一个目录的路径,我想遍历它的所有子目录,顺便收集文件的路径。 命名空间 fs = boost::filesystem; std::向量
我想创建一个目录路径=“$HOME/somedir”。 我尝试过使用 boost::filesystem::create_directory(path),但它失败了 - 显然该函数不会扩展系统变量。 怎么可以...
我在尝试使用 Boost 文件系统库编译/运行一些示例程序时遇到以下问题。 我正在使用 MS-Visual C++ 和 Visual Studio .NET (2003)。 我已经安装了
以下是我在 Debian 稳定系统上观察到的情况: % valgrind --tool=drd ./线程 ==1368067== drd,线程错误检测器 ==1368067== 版权所有 (C) 2006-2020,和 GNU GPL,作者...
我正在开发一个加密系统,理论上它应该支持难以置信的大文件(50GB 及更多)。加密算法有点复杂,需要以非
使用 Emscripten 编译时如何正确链接 Boost?
使用 Emscripten 编译时如何正确链接 Boost? 主要.cpp: #包括 int main() { boost::filesystem::exists("file.txt"); } 编译并链接: &...
boost::filesystem 库的哪些方法可以帮助我获取相对于另一个路径的路径? 我有一个路径 /home/user1/Downloads/Books 和一个路径 /home/user1/。现在我想要一条向下的路径...
如何在c++17中使用std::filesystem处理长路径
在Windows上,我试图迭代并收集目录中的所有文件,另外我想处理长路径,这就是为什么我添加了长路径前缀(L“\?\”)。但用 c++ 会崩溃...
boost::文件系统在 Google Cloud Run 中无法工作(使用 gVisor)
我使用 C++ 应用程序创建了一个 docker 容器 (ubuntu:focal),该应用程序使用 boost::filesystem (v1.76.0) 在处理数据时创建一些目录。如果我运行容器位置它就可以工作...
我已经在Linux Debian中安装了boost 1.54(根据this)。然后我安装了bjam,如下: apt-get 安装 bjam 然后,为了使用 boost 文件系统运行示例 tut1 程序,我输入: $...
windows10 上 recursive_directory_iterator 的意外行为
我有一个函数在 Windows 10 上遇到挂起问题,但在 Linux 上运行顺利。有问题的代码行似乎是 bfs::recursive_directory_iterator it(dirPath)。过了这一步,就没有了
什么是最好的扩张方式 ${MyPath}/filename.txt 到 /home/user/filename.txt 或者 %MyPath%/filename.txt 到 c:\Documents and settings\user 文件名.txt 无需遍历路径字符串...
[使用boost :: filesystem提取目录的父文件夹
假设我有以下文件夹std :: string m(“ C:\ MyFolderA \ MyFolderB \ MyFolderC”); boost :: filesystem :: path p(m);无论如何,我有没有要提取该文件夹的父文件夹。我想得到...
create_directory(“ / MyPath / .MyFolder”)未创建目录;期望创建一个隐藏目录
我想在Boost 1.7.3中创建一个隐藏目录。当我尝试:boost :: filesystem :: create_directory(“ / MyPath / .myFolder”);它不起作用,什么也不做。我尝试查看该文档,但无法...
为什么std :: filesystem :: path :: compare()和boost :: filesystem :: path :: compare()不同?
给出以下代码:fs :: path p {“ a / b /”}; fs :: path q {“ a / b /”。 };断言(p == q); [请注意在定义q的字符串末尾的额外点。]在上面,boost :: filesystem ...
Boost.Filesystem和C ++标准文件系统库有何相似之处?
我需要一个文件系统库来与具有C ++ 11的编译器或具有C ++ 14的编译器一起使用-因此它不能来自C ++ 17。现在,我知道进入C ++ 17的文件系统库基于...
VS2019上的c ++目录迭代器异常-已更改语言设置,还有什么可尝试的,它在2019年更改了吗?
我从2017年起已经移至vs2019,它带来了一些小而烦人的挑战...其中之一就是我为遍历目录并推送而开发的这段代码...]]
boost :: filesystem :: exists是否确实为没有介质的可移动介质设备抛出异常?
我在使用boost :: filesystem :: exists时遇到了一种奇怪的情况。如果您尝试检查驱动器上尚未准备就绪或没有介质的文件是否存在,则会抛出...