_stat_stat32_stat64_stati64_stat32i64_stat64i32_wstat_wstat32_wstat64_wstati64_wstat32i64_wstat64i32

ファイルのステータス情報を取得します。

構文

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 はエラーを示します。この場合、 errnoENOENT に設定され、ファイル名またはパスが見つからなかったことを示します。 EINVAL という戻り値は、無効なパラメーターを示します。この場合も errnoEINVAL に設定されます。

リターン コードの詳細については、「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 を使用します。 つまり、以前は errnoENOENT に設定すると関数はエラーになっていましたが、それとは対照的に、パスがディレクトリを参照している場合、末尾がスラッシュであるパスに対する _stat は成功します。

この関数は、パラメーターを検証します。 pathまたはbufferNULLされている場合は、「パラメーターの検証」で説明されているように、無効なパラメーター ハンドラー呼び出

既定では、この関数のグローバル状態の適用対象は、アプリケーションになります。 この動作を変更するには、「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.HTYPES.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