_stat、_wstat 関数
更新 : 2007 年 11 月
ファイルのステータス情報を取得します。
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(str
const char *path,
struct _stat32i64 *buffer
);
int _stat64i32(str
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 に設定されます。
メモ : |
---|
path にディレクトリの場所が格納される場合には、円記号 (\) を含むことはできません。円記号 (\) が含まれている場合、-1 が返され、errno が ENOENT に設定されます。 |
戻り値の詳細については、「_doserrno、errno、_sys_errlist、および _sys_nerr」を参照してください。
ファイルの日付スタンプには、世界協定時刻 (UTC) 1970 年 1 月 1 日午前 0 時から 3000 年 12 月 31 日 23 時 59 分 59 秒まで表示できます。_stat32 または _wstat32 を定義している場合、または _USE_32BIT_TIME_T を定義している場合は、UTC 2038 年 1 月 19 日までしか表示できません。
解説
_stat 関数は、path で指定されたファイルまたはディレクトリの情報を取得し、buffer で指定された構造体に格納します。_stat は、現在使用しているマルチバイト コード ページに基づいて、自動的にマルチバイト文字列の引数を適宜処理し、マルチバイト文字シーケンスを認識します。
_wstat は、_stat のワイド文字バージョンです。_wstat の path 引数はワイド文字列です。_wstat と _stat の動作は、_wstat がマルチバイト文字列を処理しない点以外は、同じです。
この関数の一連のバージョンは、32 ビットまたは 64 ビットの時刻型、および 32 ビットまたは 64 ビットのファイル長をサポートします。最初の数字サフィックス (32 または 64) は使用されている時刻型のサイズを表し、2 番目のサフィックス (i32 または i64) はファイル サイズが 32 ビットまたは 64 ビットのどちらの整数値で表されているかを示します。
Visual C++ 2005 では、_stat は _stat64i32 に相当し、struct_stat には、64 ビットの時刻が格納されます。これは _USE_32BIT_TIME_T が定義されていない場合で、これが定義されている場合は、以前の動作が有効になります。つまり、_stat は 32 ビットの時刻を使用し、struct_stat には 32 ビットの時刻が格納されます。これは、_stati64 にも当てはまります。
この関数は、パラメータを検証します。path または buffer が NULL の場合、「パラメータの検証」に説明されているように、無効なパラメータ ハンドラが呼び出されます。
_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 |
SYS\STAT.H で定義されている _stat 構造体には、次のフィールドが含まれています。
st_gid
ファイルを所有するグループの数値識別子 (UNIX 固有)。このフィールドは、Windows システムでは常に 0 になります。リダイレクトされるファイルは、Windows ファイルとして分類されます。st_atime
ファイルが最後にアクセスされた時刻。NTFS では有効ですが、FAT フォーマットのディスク ドライブでは無効です。st_ctime
ファイルが作成された時刻。NTFS では有効ですが、FAT フォーマットのディスク ドライブでは無効です。st_dev
ファイルが格納されているディスクのドライブ番号 (st_rdev と同じ)。st_ino
ファイルの情報ノード番号 (inode、UNIX 固有)。UNIX ファイル システムでは、inode によって、ファイルの日付と時刻のスタンプ、アクセス許可、および内容が記述されます。相互にハードリンクされたファイルは、同じ inode を共有します。inode および st_ino は、FAT、HPFS、または NTFS の各ファイル システムでは意味を持ちません。st_mode
ファイル モード情報を示すビット マスク。path でディレクトリを指定すると、_S_IFDIR ビットが設定されます。path で通常のファイルまたはデバイスを指定すると、_S_IFREG ビットが設定されます。ユーザー読み取り/書き込みビットはファイルのアクセス権に従って設定され、ユーザー実行ビットはファイル名の拡張子に従って設定されます。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、および _stat 構造体の st_rdev フィールドに意味はありません。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> |
互換性の詳細については、「C ランタイム ライブラリ」の「互換性」を参照してください。
使用例
// 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