_find, _wfind funções
Essas funções procurar e feche a procura por nomes de arquivo especificado:
Comentários
O _findfirst função fornece informações sobre a primeira instância de um nome de arquivo que corresponde ao especificado no arquivo de filespec argumento.Você pode usar em filespec qualquer combinação de caracteres curinga que é suportada pelo sistema operacional do host.
As funções retornam informações sobre o arquivo em um _finddata_t estrutura, que é definida em IO.h.Várias funções da família usam muitas variações sobre o _finddata_t estrutura.O basic _finddata_t estrutura inclui os seguintes elementos:
unsigned attrib
Atributo de arquivo.time_t time_create
Hora de criação do arquivo (–1L para sistemas de arquivos FAT).Essa hora será armazenada no formato UTC.Para converter a hora local, use localtime_s.time_t time_access
Hora do último acesso ao arquivo (–1L para sistemas de arquivos FAT).Essa hora será armazenada no formato UTC.Para converter a hora local, use localtime_s.time_t time_write
Hora da última gravação ao arquivo.Essa hora será armazenada no formato UTC.Para converter a hora local, use localtime_s._fsize_t size
Tamanho do arquivo em bytes.char name[ _MAX_PATH]
Nome terminada por caractere nulo de correspondentes de arquivo ou diretório, sem o caminho.
Em sistemas de arquivos que não suportam a criação e os horários dos últimos acessos de um arquivo, como, por exemplo, o sistema FAT, o time_create e time_access campos são sempre –1L.
_MAX_PATH é definido em Stdlib.h como 260 bytes.
Não é possível especificar atributos de destino (como _A_RDONLY) para limitar a operação de localização.Esses atributos são retornados a attrib campo o _finddata_t estruturar e pode ter os seguintes valores (definido em IO.h).Os usuários não devem depender que são os únicos valores possíveis para o attrib campo.
_A_ARCH
Arquivamento.Defina sempre que o arquivo é alterado e desmarcado pela BACKUP comando.Valor: 0x20._A_HIDDEN
Arquivo oculto.Não é geralmente visto com o comando DIR, a menos que você use o /AH opção.Retorna informações sobre os arquivos normais e arquivos que tenham esse atributo.Valor: 0x02._A_NORMAL
Normal.O arquivo tem não outros atributos definido e podem ser lido ou gravados sem restrição.Valor: 0x00._A_RDONLY
Somente leitura.Não é possível abrir o arquivo para gravação e não é possível criar um arquivo que tem o mesmo nome.Valor: 0x01._A_SUBDIR
Subdiretório.Valor: 0x10._A_SYSTEM
Arquivo de sistema.Não é normalmente visto com o DIR de comando, a menos que o /A ou /A:S opção é usada.Valor: 0x04.
_findnextLocaliza o próximo nome, se houver, que corresponde a filespec argumento especificado em uma chamada anterior a _findfirst.O fileinfo argumento deve apontar para uma estrutura inicializada por uma chamada anterior para _findfirst.Se uma correspondência for encontrada, o fileinfo o conteúdo de estrutura é alterado conforme descrito anteriormente.Caso contrário, ele é deixado inalterado._findcloseFecha o identificador de pesquisa especificada e libera todos os respectivos recursos para ambos _findfirst e _findnext.O identificador retornado por um _findfirst ou _findnext primeiro deve ser passado para _findclose, antes que as operações de modificação, como a exclusão, podem ser executadas nos diretórios que formam os caminhos passados para eles.
Você pode aninhar o _find funções.Por exemplo, se uma chamada para _findfirst ou _findnext localiza o arquivo que é um subdiretório, uma nova pesquisa possa ser iniciado com outra chamada para _findfirst ou _findnext.
_wfindfirste _wfindnext são versões de caractere largo de _findfirst e _findnext.O argumento da estrutura das versões caractere largo tem o _wfinddata_t o tipo de dados, que é definido em IO.h e Wchar.h.Os campos desse tipo de dados são iguais da _finddata_t o tipo de dados, exceto que, em _wfinddata_t o campo nome é do tipo wchar_t em vez do tipo char.Caso contrário, _wfindfirst e _wfindnext se comportam de forma idêntica para _findfirst e _findnext.
_findfirste _findnext usar o tipo de tempo de 64 bits.Se você precisar usar o tipo de hora antiga de 32 bits, você pode definir _USE_32BIT_TIME_T.As versões dessas funções que têm o 32 sufixo em seus nomes usam o tipo de tempo de 32 bits e aqueles com o 64 sufixo usam o tipo de tempo de 64 bits.
Funções _findfirst32i64, _findnext32i64, _wfindfirst32i64, e _wfindnext32i64 também se comportam exatamente para as versões do tipo de tempo de 32 bits dessas funções, exceto que eles usam e tamanhos de arquivo de 64 bits de retorno.Funções _findfirst64i32, _findnext64i32, _wfindfirst64i32, e _wfindnext64i32usar o tipo de tempo de 64 bits, mas usar tamanhos de arquivo de 32 bits.Essas funções usarem variações adequadas da _finddata_t em que os campos têm tipos diferentes para o tempo e o tamanho do arquivo do tipo.
_finddata_té realmente uma macro que é avaliada como _finddata64i32_t (ou _finddata32_t se _USE_32BIT_TIME_T está definido).A tabela a seguir resume as variações na _finddata_t:
Estrutura |
Tipo de tempo |
Tipo de tamanho de arquivo |
---|---|---|
_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).
Exemplo
// 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 );
}
}