_access
、 _waccess
、、 t_access
确定文件是否是只读的。 提供更安全的版本;请参阅_access_s
、_waccess_s
。
有关 _taccess
,请参阅 泛型文本函数映射。
语法
int _access(
const char *path,
int mode
);
int _waccess(
const wchar_t *path,
int mode
);
参数
path
文件或目录路径。
mode
读取/写入属性。
返回值
如果该文件具有给定的模式,则每个函数将返回 0。 如果命名文件不存在或没有给定模式,则函数返回 -1;在这种情况下,errno
的设置如下表所示。
值 | 说明 |
---|---|
EACCES |
拒绝访问:文件的权限设置不允许指定的访问权限。 |
ENOENT |
未找到文件名或路径。 |
EINVAL |
参数无效。 |
有关这些和其他的返回代码的详细信息,请参阅 errno
、_doserrno
、_sys_errlist
和 _sys_nerr
。
备注
与文件一起使用时,_access
函数确定指定的文件或目录是否存在,并且是否具有由 mode
值指定的属性。 与目录一起使用时,_access
仅确定指定的目录是否存在;在 Windows 2000 和更高版本的操作系统中,所有目录都具有读取和写入访问权限。
mode 值 |
文件检查内容 |
---|---|
00 | 仅检查是否存在 |
02 | 只写 |
04 | 只读 |
06 | 读取和写入 |
此函数仅检查文件和目录是否为只读,不检查文件系统安全设置。 因此,你需要访问令牌。 有关文件系统安全性的详细信息,请参阅访问令牌。 存在 ATL 类以提供此功能;请参阅 CAccessToken
类。
_waccess
是 _access
的宽字符版本; path
的 _waccess
参数是宽字符字符串。 除此以外,_waccess
和 _access
的行为完全相同。
此函数验证其参数。 如果 path
为 NULL
或 mode
未指定有效模式,则调用无效参数处理程序,如参数验证中所述。 如果允许继续执行,则该函数将 errno
设置为 EINVAL
并返回 -1。
默认情况下,此函数的全局状态范围限定为应用程序。 若要更改此行为,请参阅 CRT 中的全局状态。
泛型文本函数映射
Tchar.h 例程 |
_UNICODE 和 _MBCS 未定义 |
_MBCS 已定义 |
_UNICODE 已定义 |
---|---|---|---|
_taccess |
_access |
_access |
_waccess |
要求
例程 | 必需的标头 | 可选标头 |
---|---|---|
_access |
<io.h> |
<errno.h> |
_waccess |
<wchar.h> 或 <io.h> |
<errno.h> |
示例
以下示例使用 _access
检查名为 crt_ACCESS.C
的文件,以查看其是否存在以及是否允许写入。
// crt_access.c
// compile with: /W1
// This example uses _access to check the file named
// crt_ACCESS.C to see if it exists and if writing is allowed.
#include <io.h>
#include <stdio.h>
#include <stdlib.h>
int main( void )
{
// Check for existence.
if( (_access( "crt_ACCESS.C", 0 )) != -1 )
{
printf_s( "File crt_ACCESS.C exists.\n" );
// Check for write permission.
// Assume file is read-only.
if( (_access( "crt_ACCESS.C", 2 )) == -1 )
printf_s( "File crt_ACCESS.C does not have write permission.\n" );
}
}
File crt_ACCESS.C exists.
File crt_ACCESS.C does not have write permission.
另请参阅
文件处理
_chmod
, _wchmod
_fstat
、、_fstat32
_fstat64
、_fstati64
、_fstat32i64
、_fstat64i32
_open
, _wopen
_stat
、_wstat
函数