Funkcje wyszukiwania nazwy pliku
Te funkcje wyszukują i zamykają wyszukiwanie określonych nazw plików:
Uwagi
Funkcja _findfirst
udostępnia informacje o pierwszym wystąpieniu nazwy pliku zgodnego z plikiem określonym w argumencie filespec
. Można użyć w filespec
dowolnej kombinacji symboli wieloznacznych obsługiwanych przez system operacyjny hosta.
Funkcje zwracają informacje o pliku w _finddata_t
strukturze zdefiniowanej w pliku IO.h
. Różne funkcje w rodzinie używają wielu odmian struktury _finddata_t
. _finddata_t
Podstawowa struktura obejmuje następujące elementy:
unsigned attrib
Atrybut pliku.
time_t time_create
Czas tworzenia pliku (-1L
dla systemów plików FAT). Tym razem jest przechowywany w formacie UTC. Aby przekonwertować na czas lokalny, użyj polecenia localtime_s
.
time_t time_access
Czas ostatniego dostępu do plików (-1L
dla systemów plików FAT). Tym razem jest przechowywany w formacie UTC. Aby przekonwertować na czas lokalny, użyj polecenia localtime_s
.
time_t time_write
Godzina ostatniego zapisu w pliku. Tym razem jest przechowywany w formacie UTC. Aby przekonwertować na czas lokalny, użyj polecenia localtime_s
.
_fsize_t size
Długość pliku w bajtach.
char name
[ _MAX_PATH
] NULL
- zakończona nazwa dopasowanego pliku lub katalogu, bez ścieżki.
W systemach plików, które nie obsługują tworzenia i ostatniego czasu dostępu do pliku, takich jak system FAT, time_create
pola i time_access
są zawsze -1L
.
_MAX_PATH
parametr jest zdefiniowany w Stdlib.h
formacie 260 bajtów.
Nie można określić atrybutów docelowych (takich jak _A_RDONLY
) w celu ograniczenia operacji znajdowania. Te atrybuty są zwracane w attrib
polu _finddata_t
struktury i mogą mieć następujące wartości (zdefiniowane w IO.h
pliku ). Użytkownicy nie powinni polegać na tych atrybutach jako jedynymi wartościami możliwymi attrib
dla pola.
_A_ARCH
Archive (Aplikacja internetowa: Archiwum). Ustaw za każdym razem, gdy plik zostanie zmieniony i wyczyszczone przez BACKUP
polecenie . Wartość: 0x20
.
_A_HIDDEN
Ukryty plik. Nie jest często spotykany za DIR
pomocą polecenia , chyba że używasz /AH
opcji . Zwraca informacje o normalnych plikach i plikach, które mają ten atrybut. Wartość: 0x02
.
_A_NORMAL
Normalny. Plik nie ma innych atrybutów ustawionych i można je odczytywać lub zapisywać bez ograniczeń. Wartość: 0x00
.
_A_RDONLY
Tylko do odczytu. Nie można otworzyć pliku do zapisu i nie można utworzyć pliku o tej samej nazwie. Wartość: 0x01
.
_A_SUBDIR
Podkatalogu. Wartość: 0x10
.
_A_SYSTEM
Plik systemowy. Zwykle nie jest widoczny za DIR
pomocą polecenia , chyba że /A
jest używana opcja lub /A:S
. Wartość: 0x04
.
_findnext
znajduje następną nazwę, jeśli istnieje, która pasuje do argumentu filespec
określonego we wcześniejszym wywołaniu metody _findfirst
. fileinfo
Argument powinien wskazywać strukturę zainicjowaną przez poprzednie wywołanie metody _findfirst
. Jeśli zostanie znalezione dopasowanie, fileinfo
zawartość struktury zostanie zmieniona zgodnie z wcześniejszym opisem. W przeciwnym razie pozostanie bez zmian. _findclose
Zamyka określony uchwyt wyszukiwania i zwalnia wszystkie skojarzone zasoby dla obu _findfirst
i _findnext
. Dojście zwrócone przez _findfirst
element lub _findnext
należy najpierw przekazać do _findclose
elementu przed operacjami modyfikacji, takimi jak usuwanie, można wykonać na katalogach, które tworzą przekazane do nich ścieżki.
Funkcje można zagnieżdżać _find
. Jeśli na przykład wywołanie _findfirst
lub _findnext
znalezienie pliku, który jest podkatalogem, nowe wyszukiwanie można zainicjować za pomocą innego wywołania metody _findfirst
lub _findnext
.
_wfindfirst
i _wfindnext
są wersjami _findfirst
o szerokim znaku i _findnext
. Argument struktury wersji szerokiego znaku ma _wfinddata_t
typ danych, który jest zdefiniowany w IO.h
elementach i w .Wchar.h
Pola tego typu danych są takie same jak pola _finddata_t
typu danych, z tą różnicą, że w _wfinddata_t
name
polu jest typu wchar_t
zamiast typu char
. _wfindfirst
W przeciwnym razie i _wfindnext
zachowują się identycznie jak _findfirst
i _findnext
.
_findfirst
i _findnext
użyj 64-bitowego typu czasu. Jeśli musisz użyć starego 32-bitowego typu czasu, możesz zdefiniować _USE_32BIT_TIME_T
wartość . Wersje tych funkcji, które mają 32
sufiks w nazwach, używają typu czasu 32-bitowego, a te z sufiksem 64
używają typu czasu 64-bitowego.
Funkcje _findfirst32i64
, , _wfindfirst32i64
_findnext32i64
i _wfindnext32i64
zachowują się identycznie z wersjami 32-bitowego typu czasu tych funkcji, z wyjątkiem używania i zwracania 64-bitowych długości plików. Funkcje _findfirst64i32
, _findnext64i32
, _wfindfirst64i32
i _wfindnext64i32
używają typu czasu 64-bitowego, ale używają 32-bitowych długości plików. Te funkcje używają odpowiednich odmian _finddata_t
typu, w których pola mają różne typy dla czasu i rozmiaru pliku.
_finddata_t
jest w rzeczywistości makro, które daje w wyniku _finddata64i32_t
(lub _finddata32_t
jeśli _USE_32BIT_TIME_T
jest zdefiniowane). W poniższej tabeli podsumowano odmiany elementu _finddata_t
:
Struktura | Typ godziny | Typ rozmiaru pliku |
---|---|---|
_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
jest elementem typedef
for unsigned long
(32 bity).
Przykład
// 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