目前,我有一个应用程序,我从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。但是,我读到它时,它不是直接转换,因为我必须测试我是否在适用的组中以及组的权限是否也可用。
有更简单的方法吗?我对行为的解释是否正确?
(当然,我总是可以尝试打开文件进行阅读,但这不是这个问题的目标。)
答案 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