gpt4 book ai didi

c++ - 移植access(2)Linux系统调用boost::filesystem

转载 作者:太空宇宙 更新时间:2023-11-04 11:09:38 24 4
gpt4 key购买 nike

目前,我有一个应用程序正在从 Linux 移植到 Windows。我更愿意尽可能使用 boost。

我目前有以下要移植的片段,这是不言自明的。

return access(backupFile.c_str(), R_OK) == 0;

问题是 boost::filesystem 似乎没有直接的等价物。也就是说,我可以执行以下操作:

namespace fs = boost::filesystem;

if (!fs::is_regular_file(filename, ec))
return false;

fs::file_status s = fs::status(filename);

// Which permissions should I be testing for?
if (s.permissions() == ???)

可以找到 permissions() 枚举 here .然而,当我阅读它时,它不是直接翻译,因为我必须测试以查看我是否在适用的组中以及该组的权限是否也可用。

有没有更简单的方法?我对行为的解释是否正确?

(当然,我总是可以尝试打开文件进行阅读,但这不是本题的目的)。

最佳答案

由于您正在移植到 Windows,根据 Microsoft _access()第二个参数是:

00 Existence only
02 Write-only
04 Read-only
06 Read and write

因此,我认为您应该使用与上述相匹配的提升权限,同时考虑权限引用链接中的以下内容:

Windows: All permissions except write are currently ignored. There is only a single
write permission; setting write permission for owner, group, or others sets write
permission for all, and removing write permission for owner, group, or others removes
write permission for all.

或者,您可能希望继续使用带有 Microsoft 指定参数的 Windows 版本的 access()(_access() 用于 MS 编译器)。

您可能想要研究的另一个类是 ATL CAccessToken

关于c++ - 移植access(2)Linux系统调用boost::filesystem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23801630/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com