_access_s、_waccess_s
确定文件读取/写入访问权限。 _access、_waccess 的一些版本提供安全增强功能(如 CRT 中的安全功能所述)。
errno_t _access_s(
const char *path,
int mode
);
errno_t _waccess_s(
const wchar_t *path,
int mode
);
参数
path
文件或目录路径。mode
权限设置
返回值
如果文件包含特定模式,每个函数返回 0。 函数返回了错误代码,则在特定的模式,命名的文件不存在或无法访问。 在这种情况下,函数集合返回代码错误并将 errno 设置为相同的值。
EACCES
访问被拒绝。 文件权限的设置不允许指定的访问权限。ENOENT
未找到文件名或路径。EINVAL
无效参数。
有关更多信息,请参见 errno、_doserrno、_sys_errlist 和 _sys_nerr。
备注
当使用文件时,_access_s 函数来确定指定的文件是否存在并且可以根据 mode值访问。 在使用目录时,_access_s 只确定指定的目录是否存在。 在 Windows 2000 和更高版本的操作系统上,所有目录有读取和写入权限。
模式值 |
检查文件。 |
---|---|
00 |
仅存在。 |
02 |
写入权限。 |
04 |
读权限。 |
06 |
读取和写入许可。 |
读取或写入文件的权限不足够确保能打开文件。 例如,如果文件被另一进程锁定,它可能不可访问,即使 _access_s 返回 0。
_waccess_s 是 _access_s 的宽字符版本;_waccess_s 的 path 参数是宽字符字符串。 除此以外,_waccess_s 和 _access_s 的行为完全相同。
这些函数验证其参数。 如果 path 为 NULL 或 mode 不指定有效的模式,无效参数处理程序,如 参数验证所述。 如果允许继续执行,则这些函数将 errno 设置为 EINVAL,并返回EINVAL。
一般文本例程映射
Tchar.h 例程 |
未定义 _UNICODE 和 _MBCS |
已定义 _MBCS |
已定义 _UNICODE |
---|---|---|---|
_taccess_s |
_access_s |
_access_s |
_waccess_s |
要求
例程 |
必需的标头 |
可选标头 |
---|---|---|
_access_s |
<io.h> |
<errno.h> |
_waccess_s |
<wchar.h> or <io.h> |
<errno.h> |
示例
示例使用 _access_s 检查名为 crt_access_s.c 的文件以了解其是否存在,并编写是否允许。
// crt_access_s.c
#include <io.h>
#include <stdio.h>
#include <stdlib.h>
int main( void )
{
errno_t err = 0;
// Check for existence.
if ((err = _access_s( "crt_access_s.c", 0 )) == 0 )
{
printf_s( "File crt_access_s.c exists.\n" );
// Check for write permission.
if ((err = _access_s( "crt_access_s.c", 2 )) == 0 )
{
printf_s( "File crt_access_s.c does have "
"write permission.\n" );
}
else
{
printf_s( "File crt_access_s.c does not have "
"write permission.\n" );
}
}
else
{
printf_s( "File crt_access_s.c does not exist.\n" );
}
}