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

问题描述 投票:0回答:1

我想使用

std::filesystem
查询提供给我的函数的磁盘文件夹路径。 我想知道我是否有该文件夹的写入权限。 但我想这样做而不是实际尝试写入文件夹

最后一个要求部分是因为

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

看来

std::filesystem::status()
就是我想要的功能。然而,该函数返回的权限标志包括
owner_write
group_write
others_write

我如何知道哪一个适用于我? 我不知道我的应用程序/用户是所有者、组还是“其他”。 是否有某种

can_i_write_to_this_folder()
函数在某处运行?

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

的答案

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

<filesystem>

出现并给我们所有
directory_iterator
和其他好东西时,他们所宣传的目的是有用的。  所以当我发现这是真的时,我评估了它们并使用了它们。  就像我对 
std::atomic<>
 和参数包、
std::variant
 以及许多其他东西所做的那样。     我想我们都同意,多年来添加了一些东西,但事实证明并不是那么好。

现在图书馆宣传此功能,

filesystem::status()

,旨在告诉我们(除其他外)文件或文件夹的
权限。 我想知道这个“访问”信息是否有任何实际用途。

共识似乎并非如此。

c++ c++17 std std-filesystem
1个回答
0
投票
正如

使用boost获取文件的所有者和组

如何使用boost文件系统确定文件或目录的所有者?
中对
boost::filesystem(这是std::filesystem的基础)的回答,没有办法让文件的所有者使用这个库。这确实意味着了解所有者/组/其他方面的文件权限并不是很有用。

对于 POSIX 系统,您可以按照上面评论中的建议使用

access

,对于 Windows...我不知道。也许可以使用 
GetSecurityInfo
 获取文件所有者,并使用 
LookupAccountSid
 获取当前用户并进行比较。

© www.soinside.com 2019 - 2024. All rights reserved.