_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 and _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" );
}
}