【发布时间】:2020-09-05 00:08:07
【问题描述】:
我有一项任务要求我开发一个程序并通过 文件名或目录名。
如果传递的是目录名,那么我必须读取该目录中的所有文件并基本上对它们进行一些处理。
问题是我使用的是 c++,而 c++ 在没有第三方/系统库的情况下不能很好地处理文件系统。
由于我使用的是 windows 机器而分级机使用的是 linux 机器,我如何才能从不依赖平台的目录中读取所有文件。
我尝试使用文件系统,我有 gcc 9.2 但它无法编译
它不编译这个文件:
#include <iostream>
#include <filesystem>
namespace fs = std::filesystem;
int main(){
fs::path p("some-path");
}
这会导致编译器错误:
testfs.cpp:4:21: error: 'filesystem' is not a namespace-name
4 | namespace fs = std::filesystem;
| ^~~~~~~~~~
testfs.cpp: In function 'int main()':
testfs.cpp:8:5: error: 'fs' has not been declared
8 | fs::path p("some-path");
【问题讨论】:
-
GCC 9.2 不默认编译为 c++17 标准版本,第一个支持文件系统。通过将
-std=c++17添加到命令行来强制它。有和没有的例子:godbolt.org/z/Tj6car -
我完全惊呆了,我找不到像样的副本。
-
“开箱即用的 c++ 并不能很好地与文件系统配合使用”除了您的编译器错误(这不是“c++ 与文件系统一起使用”)之外,您还不清楚您指的是什么一般问题
-
@user4581301 相同的问题,但不同的 gcc 版本和标志:stackoverflow.com/questions/48312460/…
-
看到那个了。杀手锏更多的是 GCC 版本早于 C++17 版本/
标签: c++ filesystems cross-platform