微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

<filesystem> 和 <experimental/filesystem> 可以分别用于 Windows 和 Linux 吗?

如何解决<filesystem> 和 <experimental/filesystem> 可以分别用于 Windows 和 Linux 吗?

我正在寻找一种跨平台(没什么奇怪的,桌面的标准 Linux 和 Windows 安装)方式来处理目录和文件(例如:列出目录内容,检查路径是文件还是目录等.)我不想使用任何 boostQt 等。

所以经过一些研究,我发现了 <filesystem> 标头。由于我使用 C++14,我检查并发现了预标准实现(filesystem 功能成为 C++17 的 C++ 标准的一部分)可以找到它(或者至少到目前为止的部分我使用) 作为 <experimental/filesystem>

我在 Windows 和 Visual C++ 方面的知识非常缺乏,所以我的问题是这是否也适用于它,还是仅适用于 GCC 和 Clang(到目前为止我已经尝试过)?我知道在使用 cmake 时,我需要在链接时区分 Clang 和 GCC(另请参阅 3 年前的 bug report):

if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
  target_link_libraries(${PROJECT_NAME} c++experimental)
elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
  target_link_libraries(${PROJECT_NAME} stdc++fs)
endif()

在这种情况下,我不知道如何处理 Visual C++。鉴于 C++ 的特定标准,我的项目需要尽可能具有可移植性。


注意:我不想使用 C++17,但我想在我的代码添加支持它的可能性,如果有人在启用该标准的情况下构建它。这就是为什么区分 C++14 和 C++17 很重要。

解决方法

你最好不要。

来自MSVC STL source

头文件提供 std::experimental::filesystem 已被 Microsoft 弃用,并将被 已移除。它被 C++17 头文件取代 std::文件系统。

所以这将是未来 Visual Studio 版本的问题。

我想最好的选择是切换到 C++17。

常见的替代方法是 <boost/filesystem>。不太常见的替代方案是另一个跨平台库,例如 Qt。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。