Функции поиска имени файла
Эти функции осуществляют и завершают поиск для указанных имен файлов:
Замечания
Функция _findfirst
предоставляет сведения о первом экземпляре имени файла, соответствующем файлу, указанному в аргументе filespec
. В filespec
можно использовать любые комбинации подстановочных знаков, которые поддерживаются операционной системой.
Функции возвращают сведения о файле в _finddata_t
структуре, которая определена в IO.h
. Различные функции в данном семействе используют множество вариантов структуры _finddata_t
. Базовая структура _finddata_t
содержит следующие элементы:
unsigned attrib
Атрибут файла.
time_t time_create
Время создания файла (-1L
для файловых систем FAT). Это время хранится в формате 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
всегда time_access
являются -1L
полями.
_MAX_PATH
определяется как Stdlib.h
260 байт.
Не удается указать целевые атрибуты (например _A_RDONLY
), чтобы ограничить операцию поиска. Эти атрибуты возвращаются в attrib
поле _finddata_t
структуры и могут иметь следующие значения (определены в IO.h
). Пользователи не должны полагаться на эти атрибуты, являясь единственными значениями, возможными для attrib
поля.
_A_ARCH
Архивный. Установите каждый раз, когда файл изменяется и очищается командой BACKUP
. Значение: 0x20
.
_A_HIDDEN
Скрытый файл. Не часто встречается с командой DIR
, если вы не используете /AH
этот параметр. Возвращает сведения об обычных файлах и файлах, имеющих этот атрибут. Значение: 0x02
.
_A_NORMAL
Нормальный. У файла не установлены никакие другие атрибуты, чтение и запись возможны без ограничений. Значение: 0x00
.
_A_RDONLY
Только чтение. Невозможно открыть файл для записи, и файл с тем же именем не удается создать. Значение: 0x01
.
_A_SUBDIR
Подкаталог. Значение: 0x10
.
_A_SYSTEM
Системный файл. Обычно не видно с DIR
помощью команды, если /A
только не используется параметр или /A:S
параметр. Значение: 0x04
.
Функция_findnext
находит следующее имя, если таковое имеется, которое соответствует аргументу filespec
, указанному в предыдущем вызове функции _findfirst
. Аргумент fileinfo
должен указывать на структуру, инициализированную предыдущим вызовом функции _findfirst
. Если обнаружено соответствие, содержимое структуры fileinfo
изменяется, как описано выше. В противном случае он остается неизменным. Функция_findclose
закрывает указанный дескриптор поиска и освобождает все связанные ресурсы для функций _findfirst
и _findnext
. Дескриптор, возвращенный ранее функцией _findfirst
или _findnext
, необходимо сначала передать в функцию _findclose
, чтобы можно было выполнять операции изменения (например, удаление) в каталогах, которые образуют переданные им пути.
Функции _find
допускают вложение. Например, если вызов функции _findfirst
или _findnext
нашел файл, являющийся подкаталогом, новый поиск можно начать другим вызовом функции _findfirst
или _findnext
.
_wfindfirst
и _wfindnext
— это версии функций _findfirst
и _findnext
для расширенных символов. Аргумент структуры версий расширенных символов имеет _wfinddata_t
тип данных, определенный в IO.h
и в Wchar.h
. Поля этого типа данных совпадают с полями _finddata_t
типа данных, за исключением того, что в name
_wfinddata_t
поле имеет тип, а не тип wchar_t
char
. _wfindfirst
В противном случае и _wfindnext
поведение идентично _findfirst
и _findnext
.
Функции_findfirst
и _findnext
используют 64-разрядный тип времени. Если необходимо использовать прежний 32-разрядный тип времени, можно определить _USE_32BIT_TIME_T
. Версии этих функций с 32
суффиксом в их именах используют 32-разрядный тип времени, а те, с 64
суффиксом, используют 64-разрядный тип времени.
Функции _findfirst32i64
, _findnext32i64
, _wfindfirst32i64
и _wfindnext32i64
также ведут себя идентично версиям этих функций с 32-разрядным типом времени, за исключением того, что они используют и возвращают 64-разрядные значения длины файлов. Функции _findfirst64i32
, _findnext64i32
, _wfindfirst64i32
и _wfindnext64i32
используют 64-разрядный тип времени, но 32-разрядные значения длины файлов. Эти функции используют соответствующие варианты типа _finddata_t
, в которых поля имеют разные типы для времени и размера файла.
_finddata_t
фактически представляет собой макрос, который преобразуется в _finddata64i32_t
(или _finddata32_t
, если определена константа _USE_32BIT_TIME_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
представляет собой typedef
для unsigned long
(32 бита).
Пример
// 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 );
}
}
Listing of .c files
RDO HID SYS ARC FILE DATE SIZE
--- --- --- --- ---- ---- ----
N N N Y blah.c Wed Feb 13 09:21:42 2002 1715
N N N Y test.c Wed Feb 06 14:30:44 2002 312