Funkce hledání názvů souborů
Tyto funkce vyhledávají a zavírají hledání zadaných názvů souborů:
Poznámky
Funkce _findfirst
poskytuje informace o první instanci názvu souboru, který odpovídá souboru zadanému v argumentu filespec
. Můžete použít jakoukoli filespec
kombinaci zástupných znaků podporovaných hostitelským operačním systémem.
Funkce vrací informace o souboru ve _finddata_t
struktuře, která je definována v IO.h
. Různé funkce v rodině používají mnoho variant struktury _finddata_t
. Základní _finddata_t
struktura zahrnuje následující prvky:
unsigned attrib
Atribut souboru.
time_t time_create
Čas vytvoření souboru (-1L
pro systémy souborů FAT). Tento čas je uložený ve formátu UTC. Chcete-li převést na místní čas, použijte localtime_s
.
time_t time_access
Čas posledního přístupu k souborům (-1L
pro systémy souborů FAT). Tento čas je uložený ve formátu UTC. Chcete-li převést na místní čas, použijte localtime_s
.
time_t time_write
Čas posledního zápisu do souboru Tento čas je uložený ve formátu UTC. Chcete-li převést na místní čas, použijte localtime_s
.
_fsize_t size
Délka souboru v bajtech
char name
[ _MAX_PATH
] NULL
-terminated název odpovídajícího souboru nebo adresáře bez cesty.
V systémech souborů, které nepodporují vytváření a poslední přístupové časy souboru, jako je systém FAT, time_create
jsou pole a time_access
pole vždy -1L
.
_MAX_PATH
je definován jako Stdlib.h
260 bajtů.
Nemůžete zadat cílové atributy (například _A_RDONLY
) pro omezení operace hledání. Tyto atributy jsou vráceny v attrib
poli _finddata_t
struktury a mohou mít následující hodnoty (definované v IO.h
). Uživatelé by se neměli spoléhat na tyto atributy, které jsou jedinými možnými hodnotami pro attrib
dané pole.
_A_ARCH
Archive (Webová aplikace: Archiv). Nastavte pokaždé, když se soubor změní a vymaže příkazem BACKUP
. Hodnota: 0x20
.
_A_HIDDEN
Skrytý soubor. Příkaz se často nezobrazuje DIR
, pokud tuto /AH
možnost nepoužíváte. Vrátí informace o normálních souborech a souborech, které mají tento atribut. Hodnota: 0x02
.
_A_NORMAL
Normální. Soubor nemá žádné další atributy a nelze je číst nebo zapisovat bez omezení. Hodnota: 0x00
.
_A_RDONLY
Jen pro čtení. Soubor nelze otevřít pro zápis a nelze vytvořit soubor se stejným názvem. Hodnota: 0x01
.
_A_SUBDIR
Podadresář. Hodnota: 0x10
.
_A_SYSTEM
Systémový soubor. Obvykle se příkazem DIR
nezobrazuje, pokud /A
se nepoužívá možnost nebo /A:S
možnost. Hodnota: 0x04
.
_findnext
najde další název, pokud existuje, který odpovídá argumentu filespec
zadanému v dřívějším volání _findfirst
. Argument fileinfo
by měl odkazovat na strukturu inicializovanou předchozím voláním _findfirst
. Pokud se najde shoda, fileinfo
obsah struktury se změní, jak je popsáno výše. Jinak zůstane beze změny. _findclose
zavře zadaný popisovač vyhledávání a uvolní všechny přidružené prostředky pro oba _findfirst
a _findnext
. Popisovač vrácený buď _findfirst
nebo _findnext
musí být nejprve předán _findclose
, před operacemi úprav, jako je odstranění, lze provádět s adresáři, které tvoří cesty předané jim.
Funkce můžete vnořit _find
. Pokud například volání _findfirst
nebo _findnext
najde soubor, který je podadresářem, může být nové hledání zahájeno jiným voláním _findfirst
nebo _findnext
.
_wfindfirst
a _wfindnext
jsou široce znakové verze a _findnext
_findfirst
. Argument struktury širokoznakových verzí má _wfinddata_t
datový typ, který je definován v IO.h
a v Wchar.h
. Pole tohoto datového typu jsou stejná jako pole datového _finddata_t
typu, s tím rozdílem, že v name
_wfinddata_t
poli je typ wchar_t
namísto typu char
. Jinak se _wfindfirst
_wfindnext
chovají stejně jako _findfirst
a _findnext
.
_findfirst
a _findnext
použijte 64bitový typ času. Pokud musíte použít starý 32bitový typ času, můžete definovat _USE_32BIT_TIME_T
. Verze těchto funkcí, které mají příponu 32
v jejich názvech, používají 32bitový typ času a ty s 64
příponou používají 64bitový typ času.
Funkce _findfirst32i64
, _findnext32i64
a _wfindfirst32i64
_wfindnext32i64
také se chovají stejně jako 32bitové verze těchto funkcí s výjimkou jejich použití a vrácení 64bitové délky souboru. Functions _findfirst64i32
, _findnext64i32
a _wfindfirst64i32
_wfindnext64i32
používají 64bitový typ času, ale používají 32bitové délky souboru. Tyto funkce používají vhodné varianty _finddata_t
typu, ve kterém mají pole různé typy pro čas a velikost souboru.
_finddata_t
je ve skutečnosti makro, které se vyhodnotí jako _finddata64i32_t
(nebo _finddata32_t
pokud _USE_32BIT_TIME_T
je definováno). Následující tabulka shrnuje varianty _finddata_t
:
Struktura | Typ času | Typ velikosti souboru |
---|---|---|
_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
je pro unsigned long
(32 bitů).
Příklad
// 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