问题标签 [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 回答
1900 浏览

c++ - 调用 std::filesystem::copy() 时可能返回的错误代码是什么?

我似乎找不到可能传递到ec参数 for的错误代码列表std::filesystem::copy

cppreference.com 似乎表明错误代码是特定于操作系统的。
查看Microsoft 文档(因为我对 Windows 错误代码特别感兴趣,尽管我确信其他操作系统的资源对其他人会有所帮助)它看起来几乎就像是相同源文档的复制/粘贴,没有任何附加信息任何特定于 Windows 的东西。

我的猜测是错误代码将与此处列出的相同,但没有关于哪些与文件系统相关的信息,或者更具体地说是copy()功能(超出有根据的猜测)。

有没有人有任何关于可能返回的潜在错误代码的资源,或者,如果我必须以艰难的方式做到这一点(并手动尝试检查不同的错误场景),我怎么知道我是否有一个详尽的列表?

0 投票
1 回答
1035 浏览

gcc - Which versions of GCC and clang support std::filesystem/std::experimental::filesystem?

I'm using GCC 7.4.0 and clang 6.0.0 and they both seem to have an implementation of filesystem in <experimental/filesystem>.

since the project that i'm working on requires std::filesystem, i want to know which versions (Major + Minor) of them support it, and in which versions is it implemented in <experimental/filesystem> and <filesystem>.

so that i can handle the #includes and namespaces correctly, and also throw in some #ifs to avoid trying to compile the project with an unsupported version of the compilers

0 投票
1 回答
1390 浏览

c++17 - 如何在 Windows 上将 std::filesystem 与 mingw32-make 和 msys2 一起使用

我正在尝试在 Windows 上编译我的 linux 代码。由于我使用了 std::filesystem,它被阻塞了。所以我尝试根据这篇文章做一个最小的例子:

在 Windows 10 上使用 nuwen MinGW 的 C++17 文件系统

我使用相同的代码:

我使用msys2。好的,当我执行 g++ -std=c++17 ../main.cpp 时,它运行良好:

当前路径是“C:\Users\Guillaume\Documents\dev\C++\test\filesystem\build”

但是我的项目肯定太大而不能仅与 g++ 一起使用。所以我使用 cmake 和 mingw32-make。但是,它不起作用,我的错误与上面的帖子相同。补充资料:

我的问题:我应该怎么做才能在 msys2 下使用 mingw32-make 编译我的代码?

编辑:错误的开始(对于stackoverflow来说太大)

和 CMakeLists.txt :

编辑 2:

我已经修改了我的环境路径,并将 C:\tools\msys64 放在顶部。

我使用 cmake-gui,配置的日志是:

来自 set(CMAKE_VERBOSE_MAKEFILE ON) 的日志:

我的 CMAKE_CXX_COMPILER 仍然是 C:/ProgramData/chocolatey/bin/g++.exe。这可能是问题......但我能做什么?

0 投票
1 回答
42 浏览

cross-platform - CPP 是否提供了一种方法来确定哪些文件系统权限适用?

(这旨在作为有关 C++17 等较新标准的特定查询)

文件系统标头现在提供了一种获取路径权限的方法,格式为标准 3 perms 方式(所有者、组、其他)。

如何确定其中哪些是相关许可?(执行程序是所有者,是具有访问权限的组的成员,还是两者都不是的成员,因此是“其他”)

我正在寻找一种原生的跨平台方式,如果这还不可能,请告诉我。目的是避免在我自己的代码中手动将这项职责转移到显式的 unix 命令或 windows 库函数,如果我可以避免这样做的话。

0 投票
2 回答
699 浏览

c++ - 如何将 std::filesystem::path 转换为 LPCSTR 以用于 LoadLibrary() 变体之一?

在 Windows 上,我正在尝试使用 的变体之一LoadLibrary()打开dll以前写入的std::filesystem::path带有ofstream.

注意:我知道 dll 编写正确,因为我可以通过在运行时链接到它以标准方式使用它。

我一直在尝试结合以下两个答案中的方法。

如何将 std::string 转换为 LPCSTR?

如何将文件系统路径转换为字符串

这似乎应该是非常基本的,但是到目前为止我尝试过的任何事情我都会收到关于转换为 LPCSTR 的错误或类似的东西C2228: left of '.c_str' must have class/struct/union让我感到困惑。

这是一个简单的例子:

我尝试避免使用宏并LoadLibraryA()直接调用,但没有运气。我还尝试了各种传递path1, path1.string(), path1.string.c_str()path1.wstring() 等的方法,但都没有成功。我还尝试以多种方式使用临时变量来避免在LoadLibrary().

我愿意尝试使用编码(如path1.u8string()等),但我认为直接使用 of 不应该是必要的LoadLibraryA()

我试图避免 C 强制转换并且更喜欢 c++ static_ 或 dynamic_ 但我会使用任何有效的东西。

任何帮助表示赞赏。

提前致谢。

UPDATE

@eryk-sun 的评论和 @Gulrak 的回答为我解决了这个问题。它看起来像我的设置,但path1.c_str()LoadLibrary wchar_t() 宏并没有按照它应该的方式将其引导到 LoadLibraryW() 。

注意:对于将来可能偶然发现此问题的任何其他人,这里是我的特定设置的更多详细信息。我正在使用 16.1.0 (~VS2019) 的 MSVC 编译器,但它是从 VSCode 和 CMake 调用的。我没有明确定义 _UNICODE,但是 VSCode 的智能感知肯定认为它已在某处定义并指向 LoadLibraryA()。但是,我认为编译器实际上并没有看到该定义,因此它解释path1.c_str()wchar_t.

0 投票
1 回答
2121 浏览

cmake - 用于克服 libstdc++ 文件系统怪异的 CMake 习语?

如果您使用 G++ 和 libstdc++ 构建 C++14 代码,则有一个名为 的库libstdc++fs,它libstdc++std::experimental::filesystem. 如果您不链接它,您将获得未定义的引用。

我现在用来克服这个问题的“技巧”是:

然后:

但是 - 我不喜欢在我从事的每个项目中都放置这段代码。我可以使用更简单或更标准的成语吗?以某种方式,这一切可能都会隐含地发生,有一些 CMake 的幕后魔法?

0 投票
1 回答
869 浏览

c++ - std::filesystem::create_directories() 在带有斜杠的路径上的返回值

GCC (10.0.1) 和 Clang (11.0.0)/MSVC (VS 16.4.3) 当一个不存在的带有斜杠的路径作为参数给出时,表现出关于 std::filesystem::create_directories() 的不同行为。

更准确地说,虽然所有三个编译器都确实创建了目录,但后两个在这种情况下返回 false,使得 std::filesystem::create_directories() 的返回值模棱两可(并且违反直觉)。

具体来说,如果路径“a/b/c”中不存在文件,则以下程序,

在该路径创建一个目录,但在 Clang/MSVC 下打印 false 而在 GCC 下打印 true。

哪个是正确的行为?

0 投票
1 回答
194 浏览

c++ - 带有特殊路径部分的`std::filesystem::weakly_canonical`失败

我有一条由一些部分组成的路径,这些部分最终包含特殊的路径部分/../../,右侧是一些假设的部分。在特殊部分的左侧,路径可以评估为真实路径。根据参考,假设部分应该没问题,本身不是问题。

当传递给std::filesystem::weakly_canonical它时,由于路径无效(而不仅仅是一个不存在的文件/文件夹应该没问题)。我想这是因为..提到的特殊部分。

weakly_canonical在通过处理特殊部件之前我可以打电话吗?

实际上,我想std::filesystem::make_relative反对另一条路径 - 这反过来又会调用weakly_canonical输入。

0 投票
0 回答
137 浏览

c++ - 比较具有不同路径分隔符的两个 unc 路径时,std::filesystem::operator==() 返回 false 是否正确?

我刚刚遇到以下std::filesystem::path使用 Visual Studio 16.0.0 编译的行为,我想知道它是否正确。

我不是路径专家,所以我不确定在第二种情况下路径不相等是否有意义。那么这是正确的行为吗?

0 投票
3 回答
318 浏览

c++ - C++ std::filesystem::copy 因“无法到达网络位置”而失败

我编写了一个小型 c++ 应用程序,它在 Windows 启动后在几个客户端上自动启动。此应用程序会将文件从网络共享(所有客户端的相同网络共享)复制到本地磁盘。当我一次重新启动所有客户端时,其中一些客户端将从 std::filesystem::copy 函数中收到错误 1231,并显示以下消息:

“无法访问网络位置”

如果我以几秒钟的间隔重新启动所有客户端,那么就没有问题。这让我觉得复制功能可能会在复制过程中阻止文件。

是否有一些我缺少的设置可以防止这种情况发生?这是正常行为吗?

编辑:我已经能够解决网络问题,但是我现在收到错误 32,指出“该进程无法访问该文件,因为它正在被另一个进程使用”。复制功能是否锁定当前正在复制的文件?