_find, _wfind — Funkcje
Te funkcje wyszukiwania i zamknąć wyszukuje nazwy określonego pliku:
Uwagi
_findfirst Funkcja zawiera informacje dotyczące pierwszej instancji nazwę pliku, który pasuje do określonego w pliku filespec argument.Można użyć w filespec dowolnej kombinacji znaków wieloznacznych jest obsługiwany przez hosta systemu operacyjnego.
Funkcje te zwracają informacje o plikach w _finddata_t strukturę, która jest zdefiniowana w IO.h.Różne funkcje w systemach z rodziny używać wielu zmian na _finddata_t struktury.Podstawowe _finddata_t struktury obejmuje następujące elementy:
unsigned attrib
Atrybut pliku.time_t time_create
Godzina utworzenia pliku (–1L dla systemów plików FAT).Czas ten jest przechowywany w formacie UTC.Aby przekonwertować na czas lokalny, należy użyć localtime_s.time_t time_access
Czas ostatniego dostępu do pliku (–1L dla systemów plików FAT).Czas ten jest przechowywany w formacie UTC.Aby przekonwertować na czas lokalny, należy użyć localtime_s.time_t time_write
Czas ostatniego zapisu do pliku.Czas ten jest przechowywany w formacie UTC.Aby przekonwertować na czas lokalny, należy użyć localtime_s._fsize_t size
Długość pliku w bajtach.char name [ _MAX_PATH]
Nazwa zakończony znakiem null, dopasowanych pliku lub katalogu, bez ścieżki.
W systemach plików, które nie obsługują tworzenia i czasu ostatniego pliku, takie jak system FAT time_create i time_access pól są zawsze –1L.
_MAX_PATH jest zdefiniowana w plik Stdlib.h jako 260 bajtów.
Nie można określić atrybuty docelowego (takie jak _A_RDONLY) aby ograniczyć działanie Znajdź.Te atrybuty są zwracane w attrib pola _finddata_t struktury i może mieć następujące wartości (zdefiniowanych w IO.h).Użytkownicy nie powinny polegać na te są tylko wartości możliwych do attrib pola.
_A_ARCH
Archiwum.Ustaw w każdym przypadku, gdy plik jest zmieniony i wyczyszczone przez BACKUP polecenia.Wartość: 0x20._A_HIDDEN
Plik ukryty.Nie jest ogólnie postrzegane przy użyciu polecenia DIR, chyba że używasz /AH opcji.Zwraca informacje dotyczące zwykłych plików i plików, które mają ten atrybut.Wartość: 0x02._A_NORMAL
Normalny.Plik nie ma innych atrybutów set i można odczytywać ani zapisywać do bez ograniczeń.Wartość: 0x00._A_RDONLY
Tylko do odczytu.Nie można otworzyć pliku do zapisu i nie można utworzyć pliku, który ma taką samą nazwę.Wartość: 0x01._A_SUBDIR
Podkatalog.Wartość: 0x10._A_SYSTEM
Plik systemowy.Nie są zwykle widoczne z DIR polecenia, chyba że /A lub /A:S jest używana opcja.Wartość: 0x04.
_findnextWyszukuje następnej nazwy, jeśli odpowiada filespec argument w wywołaniu wcześniej _findfirst.fileinfo Argument powinny wskazywać struktury, zainicjowane przez poprzednie wywołanie _findfirst.Jeśli zostanie znaleziony odpowiednik, fileinfo struktury zawartości są zmieniane w sposób opisany wcześniej.W przeciwnym razie pozostanie niezmieniona._findcloseZamyka dojście wyszukiwania i zwalnia wszystkie skojarzone zasoby dla obu _findfirst i _findnext.Uchwyt zwrócony przez albo _findfirst lub _findnext najpierw muszą zostać przekazane do _findclose, zanim będzie można dokonać modyfikacji operacji, takich jak usuwanie, na katalogi, które tworzą ścieżek, przekazany do nich.
Można zagnieździć _find funkcji.Na przykład, jeśli wywołanie do _findfirst lub _findnext znajdzie pliku, który jest podkatalog, nowe wyszukiwanie, może zostać zainicjowane z inne wywołanie do _findfirst lub _findnext.
_wfindfirsti _wfindnext wersji szerokich znaków z _findfirst i _findnext.Argument struktury wersji szerokich znaków ma _wfinddata_t typ danych, który jest zdefiniowany w IO.h i Wchar.h.Pola tego typu danych są takie same, jak te, które _finddata_t typu danych, z wyjątkiem tych, w _wfinddata_t pole Nazwa jest typu wchar_t zamiast typu char.W przeciwnym razie _wfindfirst i _wfindnext zachowują się identycznie do _findfirst i _findnext.
_findfirsti _findnext użyć typu Godzina 64-bitowych.Jeśli musisz użyć typu stary godzina 32-bitowe, można zdefiniować _USE_32BIT_TIME_T.Wersje te funkcje, które mają 32 sufiksu nazwy ich użyć typu Godzina 32-bitowe i z 64 sufiks użyć typu Godzina 64-bitowych.
Funkcje _findfirst32i64, _findnext32i64, _wfindfirst32i64, i _wfindnext32i64 również działają identycznie do czasu 32-bitowych wersji typu te funkcje z wyjątkiem użyć i powrócić do długości 64-bitowy plik.Funkcje _findfirst64i32, _findnext64i32, _wfindfirst64i32, i _wfindnext64i32użyć typu Godzina 64-bitowych ale długości 32-bitowy plik.Funkcje te korzystają z odpowiednich zmian _finddata_t typu, w którym pola mają różne typy raz, a rozmiar pliku.
_finddata_tfaktycznie makro, którego wynikiem jest _finddata64i32_t (lub _finddata32_t Jeśli _USE_32BIT_TIME_T jest zdefiniowany).W następującej tabeli podsumowano różnice w _finddata_t:
Struktura |
Typ czasu |
Wpisz rozmiar 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_tis a typedef for unsigned long (32 bits).
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 );
}
}