在我的代码中,我尝试使用_stat()获取文件的权限。目前,我想在Windows下运行它。方法如下:
bool CFile::Private::checkPermissions(std::string sFilename, CFile::EOpenmode iOpenmode)
{
std::string sErrMsg = "";
bool bResult = true;
struct _stat buf;
int iResult = 0;
// Get data associated with "crt_stat.c":
iResult = _stat( sFilename.c_str(), &buf );
// Check if statistics are valid:
if( iResult != 0 )
{
switch (errno)
{
case ENOENT:
sErrMsg = "File: " + sFilename + " not found.";
break;
case EINVAL:
sErrMsg = "Invalid parameter to _stat(filename, &buf).";
break;
default:
/* Should never be reached. */
sErrMsg = "Unexpected error in _stat(filename, &buf).";
}
throw std::runtime_error(sErrMsg);
}
else
{
if((iOpenmode & CFile::Read) && (!(buf.st_mode & S_IREAD)))
{
bResult = false;
}
if((iOpenmode & CFile::Write) && (!(buf.st_mode & S_IWRITE)))
{
bResult = false;
}
}
return bResult;
}
Run Code Online (Sandbox Code Playgroud)
获得“假”许可的唯一方法是将文件的属性设置为“只读”。取而代之的是,设置用户的安全属性(拒绝写入和读取)将为checkPermissions(...)获得“ true”。如何同时检查Windows的属性和用户权限?
鲁莫
_stat是Windows固有的功能。它是一个辅助功能,可简化UNIX程序到Windows的移植。但是UNIX文件模型仅不适用于Windows,因此并非所有字段都有意义。例如,Windows具有真正的ACL,而不具有rwx位。只是没有办法将所有ACL信息都放入中st_mode。
如果要测试ACL权限,正确的方法是尝试:调用CreateFile()并检查GetLastError()。尝试预先获取文件权限并不可靠,因为它们可以随时更改。
| 归档时间: |
|
| 查看次数: |
14854 次 |
| 最近记录: |