移植访问(2)Linux系统调用boost :: filesystem

时间:2014-05-22 08:31:09

标签: c++ linux boost-filesystem

目前,我有一个应用程序,我从Linux移植到Windows。我希望尽可能使用提升。

我目前有以下要移植的片段,这是非常明显的。

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() == ???)

可以找到权限()枚举here。但是,我读到它时,它不是直接转换,因为我必须测试我是否在适用的组中以及组的权限是否也可用。

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

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

1 个答案:

答案 0 :(得分:1)

由于您移植到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()(MS编译器的_access())。

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