Compartilhar via


Funções _find, _wfind

Essas funções pesquisam por e fecha procura nomes de arquivo especificados:

Comentários

A função de _findfirst fornece informações sobre a primeira instância de um nome de arquivo que corresponda ao arquivo especificado no argumento de filespec . Você pode usar em filespec qualquer combinação de caracteres curinga que tem suporte pelo sistema operacional do host.

As informações do arquivo de retorno de funções em uma estrutura definddata_t _, que é definida em IO.h. As várias funções da família usam muitas variações na estrutura de _finddata_t . A estrutura básica de _finddata_t 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). Essas vezes são armazenadas em formato UTC. Para converter para hora local, use localtime_s.

  • time_t time_access
    Hora do acesso ao arquivo o último (– 1L para sistemas de arquivos FAT). Essas vezes são armazenadas em formato UTC. Para converter para hora local, use localtime_s.

  • time_t time_write
    Hora da última gravação arquivamento. Essas vezes são armazenadas em formato UTC. Para converter para hora local, use localtime_s.

  • _fsize_t size
    Comprimento do arquivo em bytes.

  • char name [ _MAX_PATH]
    Nome com terminação nula do arquivo ou diretório correspondente, sem o caminho.

Em sistemas de arquivos que não dão suporte à criação e hora do último de um arquivo, como o sistema GORDO, time_create e os campos de time_access é sempre – 1L.

_MAX_PATH é definido em Stdlib.h como 260 bytes.

Você não pode especificar atributos de destino (como _A_RDONLY) para limitar a operação de localização. Esses atributos são retornados no campo de attrib da estrutura de _finddata_t e podem ter os seguintes valores (definidas em IO.h). Os usuários não devem confiar em que esses são os únicos valores possíveis para o campo de attrib .

  • _A_ARCH
    Arquivo morto. Defina sempre que o arquivo for alterado e limpo pelo comando de BACKUP . Valor: 0x20.

  • _A_HIDDEN
    Arquivo oculto. Visto normalmente não com o comando de DIR, a menos que você use a opção de /AH . Retorna informações sobre arquivos normais e arquivos com esse atributo. Valor: 0x02.

  • _A_NORMAL
    Normal. Arquivo não tem nenhum outro atributo definido e pode ser lida ou gravada sem à restrição. Valor: 0x00.

  • _A_RDONLY
    Somente leitura. Arquivo não pode ser aberto para gravação e um arquivo com o mesmo nome não pode ser criado. Valor: 0x01.

  • _A_SUBDIR
    Subdiretório. Valor: 0x10.

  • _A_SYSTEM
    Sistema de arquivos Consultado não normalmente com o comando de DIR , a menos que a opção de /A ou de /A:S é usada. Valor: 0x04.

_findnext acha o nome seguir, se houver, que corresponde ao argumento de filespec especificado em uma chamada anterior a _findfirst. O argumento de fileinfo deve apontar para uma estrutura inicializada pela chamada anterior a _findfirst. Se for encontrada uma correspondência, o conteúdo da estrutura de fileinfo serão modificados conforme descrito anteriormente. Caso contrário, será deixada inalterado. _findclose fecha o identificador especificado da pesquisa e libera todos os recursos associados para _findfirst e _findnext. O identificador retornado por _findfirst ou por _findnext deve primeiro ser passada a _findclose, antes que as operações de alteração, como excluir, possam ser executadas nos diretórios que formam os caminhos passados a ele.

Você pode aninhar funções de _find . Por exemplo, se uma chamada a _findfirst ou a _findnext localiza o arquivo que é um subdiretório, uma nova pesquisa pode ser iniciada com outra chamada para _findfirst ou a _findnext.

_wfindfirst e _wfindnext são versões de ampla caractere de _findfirst e de _findnext. O argumento da estrutura das versões de ampla caractere tem o tipo de dados _wfinddata_t , que é definido em IO.h e em Wchar.h. Os campos desse tipo de dados são iguais aos do tipo de dados de _finddata_t , exceto que _wfinddata_t no campo nome é do tipo wchar_t em vez do tipo char. Se não _wfindfirst e _wfindnext se comportam idêntica a _findfirst e a _findnext.

_findfirst e _findnext usam o tipo de 64 bits de tempo. Se você deve usar o tipo de 32 bits antigo tempo, você pode definir _USE_32BIT_TIME_T. As versões dessas funções que têm o sufixo de 32 em seus nomes usam o tipo de 32 bits de tempo, e esses com o uso do sufixo de 64 o tipo de 64 bits de tempo.

Funções _findfirst32i64, _findnext32i64, _wfindfirst32i64, e _wfindnext32i64 também se comporta idêntica as versões de 32 bits do tipo de tempo dessas funções a não ser que usem e retorna comprimentos de 64 bits de arquivo. Função _findfirst64i32, _findnext64i32, _wfindfirst64i32, e o usode _wfindnext64i32o tipo de 64 bits de tempo mas usam comprimentos de 32 bits de arquivo. Essas variações apropriados do uso de funções de _finddata_t nos campos que têm tipos diferentes para o tempo e o tamanho do arquivo.

_finddata_t é realmente uma macro que é avaliada para _finddata64i32_t (ou a _finddata32_t se _USE_32BIT_TIME_T é definido). A tabela a seguir resume as variações em _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_t é typedef para 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 );
   }
}
  

Consulte também

Referência

Chamadas do sistema