私のコードでは、_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;
}
パーミッションを「false」にする唯一の方法は、ファイルの属性を「読み取り専用」に設定することです。これの代わりに、ユーザーのセキュリティ プロパティ (書き込みと読み取りを拒否) を設定すると、checkPermissions(...) に対して「true」が取得されます。Windows の属性とユーザー権限の両方を確認する方法は?
ルモ