_access、_waccess
更新 : 2007 年 11 月
ファイルが読み取り専用かどうかを判断します。セキュリティが強化されたバージョンを使用できるようになりました。「_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
無効なパラメータ。
リターン コードの詳細については、「_doserrno、errno、_sys_errlist、および _sys_nerr」を参照してください。
解説
_access 関数は、ファイルで使用された場合、指定したファイルまたはディレクトリが存在するかどうか、および mode 値で指定した属性が存在するかどうかを判断します。ディレクトリで使用された場合、_access は、指定したディレクトリが存在するかどうかだけを判断します。Windows 2000 以降のオペレーティング システムの場合は、すべてのディレクトリに読み取りアクセスおよび書き込みアクセスが許可されています。
mode の値 |
ファイルに対するチェック |
---|---|
00 |
存在するかどうかだけ |
02 |
書き込み専用 |
04 |
読み取り専用 |
06 |
読み取りと書き込み |
この関数は、ファイルとディレクトリが読み取り専用かどうかのみをチェックします。ファイル システムのセキュリティ設定はチェックしません。セキュリティ設定をチェックする場合、アクセス トークンが必要です。ファイル システムのセキュリティの詳細については、「Access Tokens」を参照してください。この機能を持つ ATL クラスがあります。「CAccessToken クラス」を参照してください。
ワイド文字を扱う場合は、_access ではなく _waccess を使用します。_waccess の場合、path 引数にはワイド文字列を指定します。引数の指定以外では、_waccess と _access の動作は同じです。
この関数は、パラメータを検証します。path が NULL の場合または mode で指定するモードが無効な場合は、「パラメータの検証」に説明されているように、無効なパラメータ ハンドラが呼び出されます。実行の継続が許可された場合、この関数は errno を EINVAL に設定し、-1 を返します。
汎用テキスト ルーチンのマップ
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.