Поделиться через


Функции поиска имени файла

Эти функции осуществляют и завершают поиск для указанных имен файлов:

Замечания

Функция _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

См. также

Системные вызовы