问题标签 [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.

0 投票
1 回答
289 浏览

c++ - 为什么目录上的 std::filesystem::file_size 留给实现?

所以我有以下问题:我需要总结特定目录中所有文件的字节大小,这包括子目录的大小,因为在我的情况下它们实际上可以增加大小。

但是如果我们在包含文件和子目录的目录上运行这段代码,看起来像这样:

然后你会得到一个错误,你正在尝试获取目录的文件大小。如果您在 macOS 或 Linux 上运行它,至少使用 Clang++ 10 或 11 进行编译。现在根据std::filesystem::file_size 上的 Cppreference获取目录的大小取决于实现。但是,在我看来,这很奇怪,因为 file_size 基本上只是“包装”统计信息,因此应该可以在目录上完美运行,至少在 Linux、*BSD 和 macOS 上是这样。

因此,任何人都可以启发我为什么将其留给实现,我可以访问 C++ 标准并且找不到充分的理由。

0 投票
1 回答
2789 浏览

c++ - 如何获取 std::filesystem::path 中的最后一个目录?

我有一个目录的路径,我想使用 C++ 的std::filesystem. 例如,如果路径是:

我想获得“my_directory”。

我已经看到了这个答案,并最初认为在其中起作用的东西在 中boost::filesystem不起作用std::filesystem,尽管这可能不正确。无论哪种方式,我都不相信这是重复的,因为那个是专门询问boost::filesystem的,并且路径以文件结尾。

我可以想到其他几种解决方案,例如获取fake_path.end() - 2或获取字符串以及在分隔符上拆分,但它们都不像fake_path.filename()以前那么简单。

有没有一种干净的方法来获取目录路径的最后一部分,大致相当于调用.filename()文件的路径?

0 投票
1 回答
832 浏览

c++ - Mac c++ 文件系统库无法识别

注意:这不会失败#include <filesystem>。后来失败了。

我在 macOS 10.15 上,使用 clang 11。输出clang --version

当我尝试编译一些简单的东西时:

编译器确实找到了文件系统库,但无法识别命名空间:

这是我认为我正在尝试包含的文件(我已确认存在):

我究竟做错了什么?我需要特定的编译器选项吗?命名空间错了吗?

0 投票
1 回答
2778 浏览

c++ - 使用文件系统时仍然需要使用 C++20 链接到 stdc++fs?

experimental::filesystem我刚出来时就开始使用它,并被建议以任何一种方式在我的程序构建中链接stdc++fs使用,但是如果我遗漏了额外的链接命令,我可能会破坏某些东西/做一些不必要的事情吗?target_link_libraries(MyTarget stdc++fs)CMake.

这个问题三年前提出的,似乎认为链接stdc++fs是必要的。

编辑:编译器版本是g++-9 (Homebrew GCC 9.3.0_1) 9.3.0CMake版本是 3.16。

非常感谢!

0 投票
2 回答
3552 浏览

c++ - 从 std::filesystem::path c++ 获取绝对路径

我有这段代码

我曾尝试过 std::filesystem::absolute(),但后来意识到这不是我想要的结果

我的问题是如何将该相对路径转换为绝对路径,以便结果为"/root/opt/".

我在 Debian g++-9 上使用 c++17

0 投票
1 回答
52 浏览

c++ - Uninitialized Usage in libstdc++ filesystem?

Consider the following code:

When compiling with clang10 with the flags -std=c++17 -fsanitize=memory -g -O1 -stdlib=libstdc++ it compiles totally fine, but when running, the memory sanitizer finds the following error:

When compiling with -stdlib=libc++ it works completely fine. See also godbolt (sadly, the msan-output is a bit non-descriptive there).

Is the memory sanitizer a overzealous or is there something wrong? I looked briefly into the offending file and the code

对我来说似乎没问题(__str类型std::__detail::_Quoted_string<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&只有一个用户定义的构造函数,该值从参数初始化所有三个成员)。

输出clang++ -v

0 投票
1 回答
296 浏览

c++ - 为什么 std::filesystem::path::root_name() 返回空字符串?

我有以下示例代码,我在 Visual Studio 2019 和https://godbolt.org/上运行。我可以看到有两种不同的行为。可能的原因是什么?

visualstudio 2019 中的输出:“//net”的根名称为“//net”

https://godbolt.org/中的输出:“//net”的根名称为“” 在此处输入图像描述

我刚刚阅读了http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4100.pdf - 8.4.9 路径分解 [path.decompose] 但不明白原因。

另外,我阅读了下面的代码,std::filesystem但并不完全理解

有没有人可以更详细地解释我以了解问题?

0 投票
0 回答
41 浏览

c++ - 为什么 path::root_name() 有不同的行为

在过去的几天里,我一直在尝试一些函数filesystemexperimental/filesystem库的行为。

注意:我在https://godbolt.org/上运行了代码

下面是带有输出的代码片段

1. 实验/文件系统

输出:

在此处输入图像描述 2. 文件系统

输出:

有没有办法研究这些功能的实现?

在此处输入图像描述

0 投票
1 回答
1045 浏览

c++ - c++ 17 filesystem::recursive_directory_iterator() 在 mac 上给出错误 no such directory 但适用于 windows

配置

  • macOS:10.15.5
  • 代码:11.5
  • 铿锵声:11.0.3
  • 项目设置为 c++17

我是 macOS 的新手,正在尝试解决一个简单的问题..

这段代码给了我错误(在 xcode、clion 和 cmake 上试过)-

ISSUE
这里的数据文件夹是由我手动或自动创建的。将在其中生成随机文件(子目录文件),我需要所有这些文件的路径和名称。

附加信息
此代码工作得很好

0 投票
1 回答
618 浏览

c++ - std::filesystem::canonical 和 std::filesystem::absolute 不起作用

我正在使用 C++2a 标准 Visual Studio 2019 作为代码的编译器。

无论是规范的还是绝对的,它都不会给出所需的输出。我没有将整个命令作为参数传递,而是cd直到该文件夹​​并运行命令,这意味着,在此处输入图像描述

输出与std::filesystem::canonical

正如您在图像中看到的,我没有任何规范代码的输出。

输出与std::filesystem::absolute

正如您在图像中看到的,我没有绝对代码的任何输出。



输入:我正在运行的文件。基本上是/。将其转换为规范路径/绝对路径。

我也尝试了 absolute ,它也给了我相同的输出。


更新:我使用 boost 文件系统尝试了相同的代码,我得到了一些输出但不正确。

在此处输入图像描述

C:\dasfsa/dsfafsa/sdfsa/a.exe这是不可用的。我可以手动转换那个反斜杠,但我不知道它是某种深奥的功能还是一个错误,如果它是一个错误,我不知道它还会在哪里改变那个斜杠以及如何改变。

输出与boost::filesystem::canonical

正如您在图像中看到的,我没有任何 boost::canonical 代码的输出。