_find、_wfind 系関数
これらの関数はを検索して指定したファイルの名前を検索します :
解説
_findfirst の関数は filespec 引数に指定されたファイルと一致するファイル名の最初のインスタンスについて説明します。filespec でホスト オペレーティング システムでサポートされるワイルドカード文字を使用できます。
IO.h で定義されている現在の finddata_t の構造の関数内のファイル情報。ファミリのさまざまな関数は _finddata_t の構造のバリエーションを使用します。基本の _finddata_t の構造体には次の要素が含まれています :
unsigned attrib
ファイル属性。time_t time_create
ファイルを作成する場合FAT ファイル システムの 1L)。今度はUTC 形式で格納されます。現地時刻に変換するにはlocaltime_s を使用します。time_t time_access
最後のファイルにアクセスする場合はFAT ファイル システムの 1L)。今度はUTC 形式で格納されます。現地時刻に変換するにはを使用localtime_sします。time_t time_write
ファイルの最終書き込みになります。今度はUTC 形式で格納されます。現地時刻に変換するにはlocaltime_s を使用します。_fsize_t size
バイトのファイルの長さ。char name[ _MAX_PATH]
パスのない一致したファイルまたはディレクトリの NULL で終わる名前。
作成をサポートせずファイルの最終アクセス日時FAT システムなどtime_access の time_create にはフィールドが存在するファイル システム 1L –。
_MAX_PATH は 260 バイトStdlib.h に定義されています。
_A_RDONLY(など) を検索操作を制限するにはターゲットの属性を指定することはできません。これらの属性は _finddata_t の構造体の attrib のフィールドには次の値を指定できます。IO.h で定義されている許可されます。ユーザーは attrib のフィールドにできる唯一の値です。これらに依存しないようにしてください。
_A_ARCH
アーカイブ。ファイルが BACKUP のコマンドで変更され消去するたびに設定します。値 : 0x20._A_HIDDEN
隠しファイル。/AH オプションを使用してディレクトリのコマンドと一般に見られなくいません。この属性があるファイルと通常のファイルに関する情報を返します。値 : 0x02._A_NORMAL
通常。ファイルに他の属性がないため無制限での読み取りまたは書き込みを行うことができます。値 : 0x00._A_RDONLY
読み取り専用です。ファイルが書き込み用に開きファイルが同じ名前では作成できません。値 : 0x01._A_SUBDIR
サブディレクトリ。値 : 0x10._A_SYSTEM
システム ファイル。/A または /A:S オプションを使用しない場合DIR のコマンドは見られなくいません。値 : 0x04.
_findnext_findfirst は前のの呼び出しで指定された filespec の引数に一致する次の名前があればあります。fileinfo の引数は _findfirst への前の呼び出しによって初期化された構造体を指す必要があります。一致する場合fileinfo の構造体の内容は前に説明したように変更されます。それ以外の場合は変更されません。_findclose は指定された検索ハンドルを閉じ_findfirst と _findnext 両方の関連するすべてのリソースを解放します。_findfirst または _findnext によって返されるハンドルは _findclose に変更操作が削除など渡されたパスを形成するディレクトリに実行する前に最初に渡す必要があります。
_find の関数入れ子にすることもできます。たとえば_findfirst または _findnext の呼び出しがサブディレクトリにあるファイルを検索し新しい検索は _findfirst または _findnext 別の呼び出しで開始できます。
_wfindfirst と _wfindnext は _findfirst と _findnext のワイド文字バージョンです。ワイド文字バージョンの構造体引数に IO.h と Wchar.h で定義されている _wfinddata_t のデータ型になります。このデータ型のフィールドは _finddata_t のデータ型と同じですが_wfinddata_t に名前 char フィールドは型の代わりに型 wchar_t です。それ _wfindfirst と _wfindnext は _findfirst と _findnext と同じように動作します。
_findfirst と _findnext は 64 ビットの時刻型を使用します。従来の 32 ビット時刻型を使用する必要 _USE_32BIT_TIME_T を定義できます。名前である 32 のサフィックスが付いたこれらの関数の各バージョンは32 ビットの時刻型および 64 のサフィックスの使用と時刻の型は 64 ビットの時刻型を使用します。
_findfirst32i64_findnext32i64_wfindfirst32i64 に機能し64 ビットのファイル長を使用して返す _wfindnext32i64 以外ではこれらの関数は 32 ビットの時刻型のバージョンと同様に動作します。_findfirst64i32_findnext64i32_wfindfirst64i32 と _wfindnext64i32 の使用は 64 ビットの 時刻型機能しますが32 ビット ファイル長を使用します。フィールドに時間とファイルのサイズの異なる型を持つ _finddata_t これらの関数を使用するには適切な変動。
_finddata_t は _USE_32BIT_TIME_T が定義されている場合) が実際に _finddata64i32_t 評価するマクロ (またはに _finddata32_t。次の表は _finddata_t のバリエーションをまとめたものです :
Structure |
時刻型 |
ファイル サイズの型 |
---|---|---|
_finddata_t, _wfinddata_t |
__time64_t |
_fsize_t |
_finddata32_t, _wfinddata32_t |
__time32_t |
_fsize_t |
__finddata64_t, __wfinddata64_t |
__time64_t |
__int64 |
_finddata32i64_t, _wfinddata32i64_t |
__time32_t |
__int64 |
_finddata64i32_t, _wfinddata64i32_t |
__time64_t |
_fsize_t |
_fsize_t は unsigned long (32 ビット) の typedef です。
使用例
// crt_find.c
// This program uses the 32-bit _find functions to print
// a list of all files (and their attributes) with a .C extension
// in the current directory.
#include <stdio.h>
#include <stdlib.h>
#include <io.h>
#include <time.h>
int main( void )
{
struct _finddata_t c_file;
intptr_t hFile;
// Find first .c file in current directory
if( (hFile = _findfirst( "*.c", &c_file )) == -1L )
printf( "No *.c files in current directory!\n" );
else
{
printf( "Listing of .c files\n\n" );
printf( "RDO HID SYS ARC FILE DATE %25c SIZE\n", ' ' );
printf( "--- --- --- --- ---- ---- %25c ----\n", ' ' );
do {
char buffer[30];
printf( ( c_file.attrib & _A_RDONLY ) ? " Y " : " N " );
printf( ( c_file.attrib & _A_HIDDEN ) ? " Y " : " N " );
printf( ( c_file.attrib & _A_SYSTEM ) ? " Y " : " N " );
printf( ( c_file.attrib & _A_ARCH ) ? " Y " : " N " );
ctime_s( buffer, _countof(buffer), &c_file.time_write );
printf( " %-12s %.24s %9ld\n",
c_file.name, buffer, c_file.size );
} while( _findnext( hFile, &c_file ) == 0 );
_findclose( hFile );
}
}