【问题标题】:C++ experimental filesystem library incomplete?C++ 实验文件系统库不完整?
【发布时间】:2020-02-01 21:11:29
【问题描述】:

我在 <experimental/filesystem> 包含中找到了一个简洁的方法,它告诉我路径是文件还是目录,但在 g++ v 7.4.0 上尝试使用它时出现错误。我尝试使用的方法是:.is_regular_file()

它甚至在 cppref 上,https://en.cppreference.com/w/cpp/experimental/fs/is_regular_file

但是在编译时我得到“...没有名为'is_regular_file'的成员”错误。我无法使用常规文件系统,因为我的目标系统(Ubuntu 18.04 LTS)预装了 g++ 7.4.0 并且无法更改。

知道我做错了什么吗?有谁知道我的 is_regular_file 的替代方法,以便我可以检查文件是目录还是文件?

我的包括:

#include <string>
#include <vector>
#include <experimental/filesystem>

我正在使用以下标志:-std=c++17 -lstdc++fs -O3 -Wall -Wextra -Wpedantic -Werror

【问题讨论】:

  • 你能试试cppref的第一个重载吗?或者您是否检查了所有三个重载并且没有一个存在/工作?
  • 请为此问题提供完整的minimal reproducible example。该函数存在于 GCC 7.4.0 头文件中:github.com/gcc-mirror/gcc/blob/releases/gcc-7.4.0/…
  • 三个都试过了,当在我的变量后面写点时,除了:pathstatussymlink_status~directory_entry 以及每个重载运算符之外,它甚至没有任何建议。 @ezegoing
  • @MaxPower 什么点?这是std::experimental::filesystem 命名空间中的免费功能。我认为您将其误认为是成员函数。
  • “实验”的意思是:这是家常便饭。它可能会起作用。或者它可能不起作用。或者它可能会重新格式化您的硬盘驱动器。使用风险自负。这就是“实验性”的定义。

标签: c++ g++ filesystems ubuntu-18.04


【解决方案1】:

你很困惑,因为std::experimental::filesystem (&lt;experimental/filesystem&gt;) 包含文件系统 TS,而不是 C++17 中的文件系统添加,如果你的标准库实现了它们(尽管后者是基于前者)。

在 TS 中有一个 std::experimental::filesystem::is_regular_file 免费功能(您在问题中链接到该功能)。这个免费的std::filesystem::is_regular_file 也存在于 C++17 中。

但是在 C++17 中,std::filesystem::directory_entry 类也有一个成员函数 is_regular_file

TS 版本std::experimental::filesystem::directory_entry 中没有该成员函数。

TS 与后来添加到 C++17 标准库中的内容并不完全相同。

【讨论】:

  • 我明白了!我不知道他们后来的实现与实验版本有点不同。感谢您提供更详细的解释!
  • 除了信息丰富的答案之外,这对两种实现都有效:fs::is_regular_file(myEntry.status())
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-15
  • 1970-01-01
  • 2021-12-31
  • 2013-09-03
  • 2018-01-05
相关资源
最近更新 更多