_find, _wfind 함수
이러한 함수를 찾아 지정한 파일 이름에 대한 검색을 닫습니다.
설명
_findfirst 함수는 filespec 인수에서 지정된 파일과 일치하는 파일이름의 첫 번째 인스턴스에 관한 정보를 제공합니다. 호스트 운영 체제에서 지원하는 와일드 카드 문자의 조합의 filespec 를 사용할 수 있습니다.
IO.h에 정의된 함수는 _finddata_t 구조체에 파일 정보를 반환합니다. 제품의 다양한 함수는 _finddata_t 구조체에서 다양한 변형을 사용합니다. 기본 _finddata_t 구조에는 다음 요소가 포함 됩니다.
unsigned attrib
파일 특성time_t time_create
Time of file creation (–1L for FAT file systems). 이 시간은 UTC 형식으로 저장 됩니다. 현지 시간으로 변환 하려면 localtime_s 을 사용하십시오.time_t time_access
마지막 파일 액세스 시간 (–1L fat 파일 시스템). 이 시간은 UTC 형식으로 저장 됩니다. 현지 시간으로 변환 하려면 localtime_s 을 사용하십시오.time_t time_write
파일을 마지막으로 쓴 시간입니다. 이 시간은 UTC 형식으로 저장 됩니다. 현지 시간으로 변환 하려면 localtime_s 을 사용하십시오._fsize_t size
파일의 길이(바이트)입니다.char name [ _MAX_PATH]
경로가 없는 일치하는 파일의 Null로 끝나는 이름 또는 디렉터리.
FAT 시스템과 같은 파일의 마지막 엑세스 시간 및 생성 시간을 지원하지 않는 파일 시스템에서 time_create and time_access 필드는 언제나 -1L입니다.
_MAX_PATH 는 260 바이트로 Stdlib.h에 정의 됩니다.
찾기 작업을 제한하는 대상 특성을 지정할 수 없습니다.(_A_RDONLY 와 같은) 이러한 속성은 _finddata_t 구조체의 attrib 필드에 반환하고 다음과 같은 값을 가질 수 있습니다. (IO.h 에 정의되어 있습니다) 사용자는 이러한 attrib '필드에 대한 유일하게 가능한 값에 의존해서는 안됩니다.
_A_ARCH
-Archive BACKUP 커맨드에 의해 파일이 변경되거나 삭제될 시간을 설정합니다. Value: 0x20._A_HIDDEN
숨김 파일 /AH 옵션을 사용하지 않는 경우, 일반적으로 DIR 명령어로 보이지 않습니다. 일반적인 파일에 대한 정보와 특성을 갖는 파일을 반환합니다. Value: 0x02._A_NORMAL
정상입니다. 파일은 다른 특성을 가지지 않고 제한 없이 읽고 쓸 수 있습니다. Value: 0x00._A_RDONLY
읽기 전용. 파일을 쓰기 위해 열 수 없고 같은 이름을 가진 파일을 만들 수 없습니다. Value: 0x01._A_SUBDIR
하위 디렉터리 Value: 0x10._A_SYSTEM
시스템 파일입니다. /A 또는 /A:S 옵션을 사용하지 않는 이상 일반적으로 DIR 명령을 사용하는 것은 표시 되지 않습니다. Value: 0x04.
지정된 _findfirst 에 대한 이전 호출에서 filespec 와 일치하는 경우, _findnext 는 다음 이름을 검색합니다. fileinfo 인수는 _findfirst 에 대한 이전 호출이 초기화한 구조체를 가르킵니다. 일치 하는 항목이 발견 되면 fileinfo 구조 내용은 앞에서 설명한 것과 같이 변경 됩니다. 그렇지 않으면 왼쪽으로 변경되지 않습니다. _findclose 는 지정된 검색 핸들을 닫고 _findfirst 및 _findnext 둘다에 관련 된 리소스를 해제 합니다. _findfirst 또는 _findnext 에서 반환한 핸들은 전달 경로가 형성 되는 디렉터리에서 수행 되는 삭제와 같은 작업을 수정하기 전에 _findclose 를 먼저 전달해야합니다.
중첩할 수 있는 _find 함수입니다. 예를 들어, _findfirst 또는 _findnext 에 대한 호출이 하위 디렉터리인 파일을 찾는 경우, 새로운 검색은 _findfirst 또는 _findnext 호출를 사용하여 시작될 수 있습니다.
_wfindfirst 및 _wfindnext 는 _findfirst 및 _findnext 의 와이드 문자 버전입니다. 와이드 문자 버전의 구조 인수는 _wfinddata_t IO.h 및 Wchar.h 에 정의된 데이터 형식입니다. 이 데이터 형식의 필드는 _wfinddata_t 이름 필드가 char 형식 대신 wchar_t 형식인 경우를 제외하고 _finddata_t 와 같습니다. 그렇지 않으면, _wfindfirst 및 _wfindnext 는 _findfirst 및 _findnext 와 동일하게 작동합니다.
_findfirst 및 _findnext 는 64 비트 시간 형식을 사용합니다. 이전 32 비트 시간 형식을 사용 해야 하는 경우 _USE_32BIT_TIME_T 를 정의할 수 있습니다. 이름에서 32 접두사를 가진 이러한 함수의 버전은 32 비트 시간 형식을 사용하고, 64 접두사를 가진 함수의 버전은 64 비트 시간 형식을 사용합니다.
함수 _findfirst32i64, _findnext32i64, _wfindfirst32i64, 및 _wfindnext32i64 는 또한 64 비트 파일 길이를 사용하고 반환하는 경우를 제외하고 이러한 함수의 32 비트 시간 형식과 동일하게 작동합니다. 함수 _findfirst64i32, _findnext64i32, _wfindfirst64i32, 및 _wfindnext64i32 는 64 비트 시간 형식을 사용하지만 32 비트 파일 길이를 사용합니다. 이러한 함수는 시간과 파일 크기에 대해 다른 형식을 가지는 필드인 _finddata_t 형식의 적절한 변수를 사용합니다.
_finddata_t 는 실제로 _finddata64i32_t 를 평가하는 매크로 입니다. (_USE_32BIT_TIME_T 가 정의된 경우, _finddata32_t 입니다) 다음 표에서는 _finddata_t 에서 해당 버전을 요약하여 보여 줍니다.
구조체 |
시간 형식 |
파일 크기 형식 |
---|---|---|
_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 );
}
}