如何使用 std::filesystem 查看我是否具有写入权限?

How do I use std::filesystem to see if I have write access?

提问人:Joe 提问时间:4/9/2022 最后编辑:Joe 更新时间:4/9/2022 访问量:2708

问:

我想用它来查询分配给我的函数的磁盘文件夹路径。我想知道我是否具有对该文件夹的写入权限。但是我想在不实际尝试写入文件夹的情况下做到这一点。std::filesystem

最后一个要求部分是因为

  • a) 我不想更改文件系统在文件夹上的上次写入时间
  • b) 如果可能的话,我想学习如何通过以某种独立于平台的方式查询文件系统来做到这一点

看起来 std::filesystem::status() 是我想要的函数。但是,该函数返回的权限标志包括 、 和 。owner_writegroup_writeothers_write

我如何判断哪些适用于我?我不知道我的应用程序/用户是所有者、组还是“其他”。有某种功能在某个地方踢来踢去吗?can_i_write_to_this_folder()

我能找到的唯一与此相关的线程没有涉及的答案<filesystem>

[编辑]人们似乎认为我在寻找一些不切实际的可写性保证。我不是。我并不认为任何文件系统函数都是万无一失的。我不会将某些关键任务系统建立在这个决定的基础上

当过来给我们所有和其他好东西时,他们宣传的目的很有用。因此,当我发现这是真的时,我评估了它们并使用了它们。就像我为参数包和许多其他东西所做的那样。我想我们都同意,这些年来增加了一些东西,但被证明不是那么好。<filesystem>directory_iteratorstd::atomic<>std::variant

现在,该库宣传了此功能,旨在告诉我们(除其他外)文件或文件夹的权限。我想知道这个“访问”信息是否有任何实际用途。filesystem::status()

人们的共识似乎是事实并非如此。

C++ C++17 标准 文件系统

评论

4赞 Remy Lebeau 4/9/2022
这与昨天的讨论非常相似(只是那个是关于可读性的)。“我想在不实际尝试写入文件夹的情况下执行此操作” - 对不起,但最好的选择是尝试编写一些东西,看看它是否失败。幕后有太多事情要做,无法做其他任何事情。仅凭权限是不够的。
1赞 Marshall Clow 4/9/2022
考虑以下情况:您有权写入,但没有空格。
2赞 Joe 4/9/2022
幸运的是,这不是一个现实的问题。我不是要为这里可能发生的每一种意外情况做好准备。我只是想找到一种独立于平台的方式来检查这个东西,而不会改变它正在检查的东西
2赞 Joe 4/9/2022
@PaulSanders 我计划返回一个更及时(并且希望提供信息)的错误,而不是在一段时间后抛出的异常(当第一次尝试写入文件夹时可能发生时)错误。我通常会在初始化时进行一些这样的状态检查。如果我觉得我必须退回到尝试一个虚拟写作,看看会发生什么,我会去做。但是,这就引出了一个问题:当图书馆没有任何有用的东西可以做时,它给我们这些“信息”的意义何在?这根本不是信息。std::filesystem::error
3赞 Paul Sanders 4/9/2022
在这种情况下,我会按照您链接到的问题中的建议进行访问。这比所依赖的基础调用执行更有用的检查,至少如果失败,您可以检查。它非常便携,甚至 Windows 也有它(尽管不幸的是他们已经重命名了它),那么为什么不呢?statstd::filesystem::statuserrnoaccess_access

答: 暂无答案