_find, _wfind (Funciones)
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_create y los campos de time_access siempre están – 1L.
_MAX_PATH se 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_t y pueden tener los valores siguientes (definidos 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 . Value: 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. Value: 0x02._A_NORMAL
Normal. El archivo no establecido ningún otro atributo y se puede leer o escribir sin en la restricción. Value: 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. Value: 0x01._A_SUBDIR
Subdirectorio. Value: 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 . Value: 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 se define _USE_32BIT_TIME_T ). 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 );
}
}