_find, funciones de _wfind
La búsqueda de estas funciones para y cierre busca los nombres de archivo especificado:
Comentarios
La función de _findfirst proporciona información sobre la primera instancia de un nombre de archivo que coincida con el archivo especificado en el argumento de filespec .Puede utilizar en filespec a cualquier combinación de caracteres comodín admitida por el sistema operativo host.
Las funciones devuelven información de archivo en una estructura definddata_t de _, que se define en IO.h.las diversas funciones en la familia utilizan muchas variaciones en la estructura de _finddata_t .La estructura básica de _finddata_t incluye los siguientes elementos:
unsigned attrib
atributo de archivo.time_t time_create
Hora de creación de archivos (– 1L para los sistemas de archivos FAT).Esta vez se almacena en formato UTC.Para convertir la hora local, utilice localtime_s.time_t time_access
Hora de acceso a archivos último (– 1L para los sistemas de archivos FAT).Esta vez se almacena en formato UTC.Para convertir la hora local, utilice localtime_s.time_t time_write
Hora de la última escritura al archivo.Esta vez se almacena en formato UTC.Para convertir la hora local, utilice localtime_s._fsize_t size
Longitud en bytes de un archivo.char name[ _MAX_PATH]
Nombre terminado en null del archivo o directorio con, sin la ruta.
En los sistemas de archivos que no admiten la creación y los tiempos de acceso pasan de un archivo, como el sistema GORDO, time_createy los campos de time_accesssiempre están – 1L.
_MAX_PATHse define en Stdlib.h en 260 bytes.
No puede especificar atributos de destino (como _A_RDONLY) para limitar la operación de búsqueda.estos atributos se devuelven en el campo de attrib de la estructura de _finddata_ty pueden tener los valores siguientes (definido en IO.h).Los usuarios no deben basarse en estos que son los únicos valores posibles para el campo de attrib .
_A_ARCH
archivo.Conjunto siempre que el archivo se modifique y borrado por el comando de BACKUP .valor: 0x20._A_HIDDEN
archivo oculto.Visto no normalmente con el comando de DIR, a menos que utilice la opción de /AH .Devuelve información sobre los archivos normales y los archivos que tienen este atributo.valor: 0x02._A_NORMAL
Normal.El archivo no establecido ningún otro atributo y se puede leer o escribir sin en la restricción.valor: 0x00._A_RDONLY
Sólo lectura.El archivo no se puede abrir para escribir y un archivo que tiene el mismo nombre no se puede crear.valor: 0x01._A_SUBDIR
subdirectorio.valor: 0x10._A_SYSTEM
Archivo de sistema.Visto no normalmente al comando de DIR , a menos que se utilice la opción de /A o de /A:S .valor: 0x04.
_findnext encuentra el siguiente nombre, si existe, que coincide con el argumento de filespec especificado en una llamada anterior a _findfirst.El argumento de fileinfo debe señalar a una estructura inicializado por la llamada anterior a _findfirst.Si se encuentra una coincidencia, el contenido de la estructura de fileinfo cambian tal como se describió anteriormente.De lo contrario, queda sin modificar._findclose cierra el identificador de búsqueda y libera especificados todos los recursos asociados para _findfirst y _findnext.El identificador devuelto por _findfirst o _findnext se debe pasar a_findclose, antes de que las operaciones de modificación, como eliminar, se pueden realizar en los directorios que forman las rutas pasadas a ellas.
Puede anidar las funciones de _find .Por ejemplo, si una llamada a _findfirst o a _findnext busca el archivo que es un subdirectorio, una nueva búsqueda se puede iniciar con otra llamada a _findfirst o a _findnext.
_wfindfirst y _wfindnext son versiones de caracteres anchos de _findfirst y de _findnext.El argumento de la estructura de las versiones de caracteres anchos tiene el tipo de datos de _wfinddata_t , que se define en IO.h y en Wchar.h.Los campos de este tipo de datos son los mismos que los del tipo de datos de _finddata_t , salvo que en _wfinddata_t el campo name es de wchar_t escrito en lugar de charescrito.Si no _wfindfirst y _wfindnext se comportan de forma idéntica a _findfirst y a _findnext.
_findfirst y _findnext utilizan el tipo de 64 bits del tiempo.Si debe utilizar el tipo antiguo de 32 bits del tiempo, puede definir _USE_32BIT_TIME_T.Las versiones de estas funciones que tienen el sufijo de 32 en sus nombres utilizan el tipo de 32 bits del tiempo, y a aquellos con el uso del sufijo de 64 el tipo de 64 bits del tiempo.
Funciona _findfirst32i64, _findnext32i64, _wfindfirst32i64, y _wfindnext32i64 también se comporta de forma idéntica a las versiones de 32 bits de tipo en tiempo de estas funciones a menos que utilizan y devuelven longitudes de 64 bits del archivo.Funciona _findfirst64i32, _findnext64i32, _wfindfirst64i32, y el usode _wfindnext64i32tiempo 64 bits tipo pero utiliza longitudes de 32 bits del archivo.Estas funciones utilizan las variaciones adecuadas de _finddata_t escrito que los campos tienen distintos tipos por tiempo y el tamaño del archivo.
_finddata_t es realmente una macro que se evalúa como _finddata64i32_t (o a _finddata32_t si _USE_32BIT_TIME_T es definido).La tabla siguiente se resumen las variaciones en _finddata_t:
Estructura |
Tipo de tiempo |
Tipo de tamaño de archivo |
---|---|---|
_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 es typedef para unsigned long (32 bits).
Ejemplo
// 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 );
}
}