问题标签 [std-filesystem]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 使用 std::filesystem 替换文件
经常有一个模式
- 将输出写入临时文件(bla.txt.tmp)
- 删除原始文件(rm bla.txt)
- 重命名一个新的(bla.txt.tmp -> bla.txt)
std::filesystem 中是否有任何实用程序函数可以执行此操作,或者我需要使用重命名和删除来逐个执行步骤。
c++ - 文件系统路径字符串方法返回混合的 \ 和 /
我有一个 C++ 程序,我在其中使用递归迭代器来遍历我作为参数提供给程序的文件夹。
问题是当我在路径上调用 .string 时,我得到混合的 \ 和 / 在路径中。使用 .generic_string 解决了这个问题,但我想知道这是 VS2019 中的错误还是允许的行为。
举一些例子:我将 a/b 作为我的程序的输入。
当我遍历所有文件并使用 .string 打印它们时,我得到
a/b\c\bla.txt
a/b\d\lol.txt
当我使用 .generic_string 我得到
a/b/c/bla.txt
a/b/d/lol.txt
c++ - Clang 拒绝编译 libstdc++ 的标题
考虑这个最小的例子:
它在 GCC 9.2 中按预期工作,但 Clang 8.0.1 拒绝编译<filesystem>
头文件(来自 GCC 9.2 的 libstdc++):
它是 Clang 错误还是 libstdc++ 错误?
我在 MSYS2 错误跟踪器上找到了这个错误报告,但那里没有有用的信息。
<filesystem>
在我们等待官方修复时,有没有办法修补标头以消除此错误?
我在 Windows 上。我正在使用 MSYS2 包中提供的最新 GCC 和 Clang。
GCC 标识为:
Clang 标识为:
Clang 使用这个 GCC 附带的 libstdc++。
c++ - [LLVM-9 clang-9 OSX]:std::filesystem::path 无法识别
您好,在 OSX Mojave 上升级到 LLVM-9 版本后,使用brew upgrade llvm
我收到以下错误:
我的代码:
这是正常的吗?
c++ - std::filesystem 根路径如何将自己作为父路径?
这个程序:
产生这个输出:
(编辑:我对正斜杠的使用感到困惑,所以我更新了这段代码以显示无论您在 Windows 上使用哪种路径分隔符都会发生同样的事情)
这对我来说毫无意义。目录如何成为其自身的父级?如果它永远不会返回 false,那么即使有一个“has_parent”函数又有什么意义呢?
最重要的是:如果我正在编写递归搜索目录树以查找文件的代码,那么检测我已经点击根文件夹并应该停止的最佳/最可靠的方法是什么?
(如果重要的话,我在 C++17 语言模式下使用 Visual Studio 2019)
c++ - *--end() 在 C++ 中是什么意思?
查看此 cppreference.com 页面,std::filesystem::path::filename
该方法的描述实际上只是“等效于relative_path().empty() ? path() : *--end()
”。我从未见过这种语法“*--end()”。我可以从上下文中弄清楚它的作用,但它到底是什么意思?并且可以在不同的上下文中使用它来提取子字符串吗?
character-encoding - 使用 std::filesystem::path 处理 std::string/std::wstring 的跨平台方法
我有一段在 Linux 上引发异常的 C++ 代码示例:
抛出的异常是:filesystem error: Cannot convert character sequence: Invalid in or incomplete multibyte or wide character
我推测这个问题与ç
角色的使用有关。
- 为什么这个宽字符串 (wchar_t) 是“无效或不完整的多字节或宽字符”?
- 展望未来,我如何使相关代码跨平台运行在 Windows 和/或 Linux 上。
- 我需要使用辅助功能吗?
- 我需要从程序员的 PoV 中强制执行哪些规则?
- 我在这里看到一个回复说“不要在 Linux 上使用宽字符串”,我是否对 Windows 使用相同的规则?
Linux 环境(不要忘记我想跨平台运行的事实):
- Ubuntu 18.04.3
- GCC 9.2.1
- C++17
c++ - llvm 9 在 10.15 之前的 mac 版本上支持 std::filesystem 吗?
我有一台运行 El Capitan 版本 10.11.6 的旧 Mac(大约 2009 年)。Apple 不允许在我的机器上进一步更新其操作系统,但通过 Macports,它可以作为非 Apple 特定软件的良好开发环境。
我正在使用 g++ 9.2 进行编译,它支持开箱即用的 std::filesystem,而使用不支持的 clang 8.0。(在每种情况下都使用每个编译器的本机标准库。)我正在使用 --std=c++2a 进行编译。
我注意到 llvm 9 应该支持开箱即用的 std::filesystem ( https://libcxx.llvm.org/docs/UsingLibcxx.html#using-filesystem ),所以我通过 Macports 下载了 clang/llvm 9 . 不幸的是,我遇到了障碍。
重现错误的最少代码是对 cppreference.com ( https://en.cppreference.com/w/cpp/filesystem/path/path )示例的简化
这是 CmakeLists.txt
这是编译器的抱怨:
向后工作,我在 /opt/local/libexec/llvm-9.0/include/c++/v1/__config 中找到了这段代码:
据我所知,这个#define 是上述错误信息的最终原因。
所以,我的问题是:
- 这是 LLVM 的错误吗?毕竟,GCC 不会在 std::filesystem 和操作系统版本之间引入依赖关系。
- 这是 Macports 的错误吗?也许他们在构建时没有使用正确的标志?
- 如果我要本地构建 LLVM 和 Clang,我可以解决这个问题吗?
- 这是一个问题吗?也许 LLVM 的好人知道一些 GCC 的好人不知道的事情。
注意:有一个类似的问题涉及通过 Homebrew 下载的 clang/llvm。不幸的是,评论没有帮助。 [LLVM-9 clang-9 OSX]:std::filesystem::path 无法识别
xcode - 使用 C++17 std::filesystem 是否需要 MacOS 10.15?(Xcode 11.1)
使用 Xcode 11.1,在 MacOS 10.14.6 (Mojave) 上构建,以下行:
...生成此编译器错误:
这是否意味着我无法从 10.14 构建早期版本的 MacOS(10.13、10.14),或者我无法从 10.15 生成可以在 10.15 之前的 MacOS 版本上定位/运行的可执行文件?