Share via


_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 會設定如下表所示。

Description
EACCES 拒絕存取:檔案的許可權設定不允許指定的存取。
ENOENT 找不到檔案名稱或路徑。
EINVAL 無效的 參數。

如需這些傳回碼和其他傳回碼的詳細資訊,請參閱 errno_sys_errlist_doserrno_sys_nerr

備註

搭配檔案使用時,_access 函式會判斷指定的檔案或目錄是否存在,以及是否有 mode 值指定的屬性。 搭配目錄使用時, _access 只會判斷指定的目錄是否存在;在 Windows 2000 和更新版本的作業系統中,所有目錄都有讀取和寫入權限。

mode 檢查檔案
00 只存在
02 唯寫
04 唯讀
06 讀取和寫入

此函式只會檢查檔案和目錄是否為唯讀,而不會檢查檔案系統安全性設定。 該項作業需要存取權杖。 如需檔案系統安全性的詳細資訊,請參閱 存取權杖 。 ATL 類別存在以提供這項功能;請參閱 CAccessToken 類別

_waccess 是寬字元版本的 _accesspath_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 函式