_access_waccess

确定文件是否是只读的。 提供更安全的版本;请参阅_access_s_waccess_s

语法

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 的行为完全相同。

此函数验证其参数。 如果 pathNULLmode 未指定有效模式,则调用无效参数处理程序,如参数验证中所述。 如果允许继续执行,则该函数将 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 函数