ファイルのステータス情報を取得します。
構文
int _stat(
const char *path,
struct _stat *buffer
);
int _stat32(
const char *path,
struct __stat32 *buffer
);
int _stat64(
const char *path,
struct __stat64 *buffer
);
int _stati64(
const char *path,
struct _stati64 *buffer
);
int _stat32i64(
const char *path,
struct _stat32i64 *buffer
);
int _stat64i32(
const char *path,
struct _stat64i32 *buffer
);
int _wstat(
const wchar_t *path,
struct _stat *buffer
);
int _wstat32(
const wchar_t *path,
struct __stat32 *buffer
);
int _wstat64(
const wchar_t *path,
struct __stat64 *buffer
);
int _wstati64(
const wchar_t *path,
struct _stati64 *buffer
);
int _wstat32i64(
const wchar_t *path,
struct _stat32i64 *buffer
);
int _wstat64i32(
const wchar_t *path,
struct _stat64i32 *buffer
);
パラメーター
path
既存のファイルやディレクトリのパスを含む文字列へのポインター。
buffer
結果を格納する構造体へのポインター。
戻り値
これらの各関数は、ファイルのステータス情報が取得されると、0 を返します。 戻り値 -1 はエラーを示します。この場合、 errno が ENOENT に設定され、ファイル名またはパスが見つからなかったことを示します。 EINVAL という戻り値は、無効なパラメーターを示します。この場合も errno は EINVAL に設定されます。
リターン コードの詳細については、「errno、_doserrno、_sys_errlist、および _sys_nerr」を参照してください。
ファイルの日付スタンプは、午前 0 時より後の場合に表すことができます。 1970 年 1 月 1 日、および 23:59:59 より前、3000 年 12 月 31 日(UTC)、 _stat32 または _wstat32を使用する場合、または _USE_32BIT_TIME_Tを定義している場合を除き、日付は 2038 年 1 月 18 日 23:59:59 (UTC) までしか表されません。
解説
_stat 関数は、 path によって指定されるファイルやディレクトリに関する情報を取得し、 bufferによって示される構造体にそれを格納します。 _stat は、現在使用中のマルチバイト コード ページに従ってマルチバイト文字シーケンスを認識し、マルチバイト文字列の引数を適切な方法で自動的に処理します。
_wstat 関数は、 _stat関数のワイド文字バージョンです。 path 関数の引数 _wstat は、ワイド文字列です。 _wstat がマルチバイト文字列を処理しない点を除き、_wstat と _stat の動作は同じです。
これらの関数のバリエーションでは、32 ビットまたは 64 ビットの時間型と、32 ビットまたは 64 ビットのファイル長がサポートされます。 最初の数字のサフィックス (32 または 64) は、使用される時刻型のサイズを示します。2 番目のサフィックスは i32 または i64で、ファイル サイズが 32 ビットの整数として表されるか、それとも 64 ビットの整数として表されるかを示します。
_stat は _stat64i32に相当し、 struct _stat には 64 ビット時刻が含まれます。ただし、 _USE_32BIT_TIME_T が定義されていない限り、古い動作が有効になります。 _stat は 32 ビット時刻を使用し、 struct _stat には 32 ビット時刻が含まれます。 同じことが _stati64にも当てはまります。
Note
_wstat は、Windows Vista のシンボリック リンクでは機能しません。 この場合、 _wstat は常に、ファイル サイズとして 0 を報告します。 _stat は、シンボリック リンクで正しく機能します。
Visual Studio 2015 では、関数の _stat ファミリは Visual Studio 2013 以前のように FindFirstFile ではなく CreateFile を使用します。 つまり、以前は errno を ENOENT に設定すると関数はエラーになっていましたが、それとは対照的に、パスがディレクトリを参照している場合、末尾がスラッシュであるパスに対する _stat は成功します。
この関数は、パラメーターを検証します。 pathまたはbufferがNULLされている場合は、「パラメーターの検証」で説明されているように、無効なパラメーター ハンドラー呼び出。
既定では、この関数のグローバル状態の適用対象は、アプリケーションになります。 この動作を変更するには、「CRT でのグローバル状態」を参照してください。
_stat の時刻型とファイル長型のバリエーション
| 関数 | _USE_32BIT_TIME_T が定義されている |
時刻型 | ファイル長型 |
|---|---|---|---|
_stat, _wstat |
未定義 | 64 ビット | 32 ビット |
_stat, _wstat |
定義済み | 32 ビット | 32 ビット |
_stat32, _wstat32 |
マクロ定義の影響を受けない | 32 ビット | 32 ビット |
_stat64, _wstat64 |
マクロ定義の影響を受けない | 64 ビット | 64 ビット |
_stati64, _wstati64 |
未定義 | 64 ビット | 64 ビット |
_stati64, _wstati64 |
定義済み | 32 ビット | 64 ビット |
_stat32i64, _wstat32i64 |
マクロ定義の影響を受けない | 32 ビット | 64 ビット |
_stat64i32, _wstat64i32 |
マクロ定義の影響を受けない | 64 ビット | 32 ビット |
汎用テキスト ルーチンのマップ
TCHAR.H ルーチン |
_UNICODE と _MBCS が定義されていない |
_MBCS が定義されている |
_UNICODE が定義されている |
|---|---|---|---|
_tstat |
_stat |
_stat |
_wstat |
_tstat64 |
_stat64 |
_stat64 |
_wstat64 |
_tstati64 |
_stati64 |
_stati64 |
_wstati64 |
_tstat32i64 |
_stat32i64 |
_stat32i64 |
_wstat32i64 |
_tstat64i32 |
_stat64i32 |
_stat64i32 |
_wstat64i32 |
_stat 構造体 (SYS\STAT.H で定義される) には、次のフィールドが含まれています。
| フィールド | 説明 |
|---|---|
st_gid |
ファイル (UNIX 固有) を所有するグループの数値 ID。Windows システムでは、このフィールドは常に 0 になります。 リダイレクトされたファイルは、Windows ファイルとして分類されます。 |
st_atime |
ファイルに最後にアクセスした時刻。 NTFS では有効ですが、FAT 形式のディスク ドライブでは無効です。 |
st_ctime |
ファイルの作成時刻。 NTFS では有効ですが、FAT 形式のディスク ドライブでは無効です。 |
st_dev |
ファイルを含むディスクのドライブ番号 ( st_rdevと同じ)。 |
st_ino |
ファイル (UNIX 固有) の情報ノードの数 ( inode)。 UNIX ファイル システムでは、 inode は、ファイルの日時スタンプ、アクセス許可、コンテンツを記述します。 ファイルが互いにハードリンクされている場合、同じ inodeを共有します。 inode、そして必然的に st_inoは、FAT、HPFS、または NTFS ファイル システムでは意味がありません。 |
st_mode |
ファイル モード情報のビット マスク。 _S_IFDIR がディレクトリを指定する場合、 path ビットが設定されます。 _S_IFREG が通常のファイルまたはデバイスを指定する場合、 path ビットが設定されます。 ユーザーの読み取り/書き込みビットは、ファイルのアクセス許可モードに応じて設定されます。ユーザー実行ビットは、ファイル名の拡張子に応じて設定されます。 |
st_mtime |
ファイルの最終変更時刻。 |
st_nlink |
非 NTFS ファイル システムでは常に 1 です。 |
st_rdev |
ファイルを含むディスクのドライブ番号 ( st_devと同じ)。 |
st_size |
ファイルのサイズ (バイト単位)。i64 サフィックスを持つバリエーションの場合は 64 ビットの整数。 |
st_uid |
ファイルを所有するユーザーの数値識別子 (UNIX 固有)。 Windows システムでは、このフィールドは常に 0 です。 リダイレクトされたファイルは、Windows ファイルとして分類されます。 |
path がデバイスを参照する場合、 st_size構造体における st_dev、各種時刻フィールド、 st_rdev 、 _stat フィールドには、意味がありません。 STAT.H は TYPES.H で定義される _dev_t 型を使用するため、コード内で STAT.H の前に TYPES.H をインクルードする必要があります。
要件
| ルーチンによって返される値 | 必須ヘッダー | 省略可能なヘッダー |
|---|---|---|
_stat、 _stat32、 _stat64、 _stati64、 _stat32i64、 _stat64i32 |
<sys/types.h>、その後で <sys/stat.h> |
<errno.h> |
_wstat、 _wstat32、 _wstat64、 _wstati64、 _wstat32i64、 _wstat64i32 |
<sys/types.h>、その後に <sys/stat.h> または <wchar.h> |
<errno.h> |
互換性の詳細については、「 Compatibility」を参照してください。
例
// crt_stat.c
// This program uses the _stat function to
// report information about the file named crt_stat.c.
#include <time.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>
#include <errno.h>
int main( void )
{
struct _stat buf;
int result;
char timebuf[26];
char* filename = "crt_stat.c";
errno_t err;
// Get data associated with "crt_stat.c":
result = _stat( filename, &buf );
// Check if statistics are valid:
if( result != 0 )
{
perror( "Problem getting information" );
switch (errno)
{
case ENOENT:
printf("File %s not found.\n", filename);
break;
case EINVAL:
printf("Invalid parameter to _stat.\n");
break;
default:
/* Should never be reached. */
printf("Unexpected error in _stat.\n");
}
}
else
{
// Output some of the statistics:
printf( "File size : %ld\n", buf.st_size );
printf( "Drive : %c:\n", buf.st_dev + 'A' );
err = ctime_s(timebuf, 26, &buf.st_mtime);
if (err)
{
printf("Invalid arguments to ctime_s.");
exit(1);
}
printf( "Time modified : %s", timebuf );
}
}
File size : 732
Drive : C:
Time modified : Thu Feb 07 14:39:36 2002
関連項目
ファイル処理
_access, _waccess
_fstat、 _fstat32、 _fstat64、 _fstati64、 _fstat32i64、 _fstat64i32
_getmbcp
_setmbcp