Función FindFirstFileTransactedW (winbase.h)
[Microsoft recomienda encarecidamente que los desarrolladores usen medios alternativos para lograr las necesidades de la aplicación. Muchos escenarios para los que se desarrolló TxF se pueden lograr mediante técnicas más sencillas y disponibles. Además, es posible que TxF no esté disponible en versiones futuras de Microsoft Windows. Para obtener más información y alternativas a TxF, consulte Alternativas al uso de NTFS transaccional.
Busca en un directorio un archivo o subdirectorio con un nombre que coincida con un nombre específico como una operación de transacción.
Esta función es la forma de transacción de la función FindFirstFileEx .
Para obtener la versión más básica de esta función, consulte FindFirstFile.
Sintaxis
HANDLE FindFirstFileTransactedW(
[in] LPCWSTR lpFileName,
[in] FINDEX_INFO_LEVELS fInfoLevelId,
[out] LPVOID lpFindFileData,
[in] FINDEX_SEARCH_OPS fSearchOp,
LPVOID lpSearchFilter,
[in] DWORD dwAdditionalFlags,
[in] HANDLE hTransaction
);
Parámetros
[in] lpFileName
Directorio o ruta de acceso, y el nombre de archivo. El nombre de archivo puede incluir caracteres comodín, por ejemplo, un asterisco (*) o un signo de interrogación (?).
Este parámetro no debe ser NULL, una cadena no válida (por ejemplo, una cadena vacía o una cadena que falta el carácter nulo de terminación) o terminar en una barra diagonal inversa final (\).
Si la cadena termina con un carácter comodín, punto (.) o nombre de directorio, el usuario debe tener acceso a la raíz y a todos los subdirectorios de la ruta de acceso.
El archivo debe residir en el equipo local; de lo contrario, se produce un error en la función y el último código de error se establece en ERROR_TRANSACTIONS_UNSUPPORTED_REMOTE.
De forma predeterminada, el nombre está limitado a MAX_PATH caracteres. Para ampliar este límite a 32 767 caracteres anchos, anteponga "\\?\\ " a la ruta de acceso. Para obtener más información, vea Nomenclatura de archivos, rutas de acceso y espacios de nombres.
Sugerencia
A partir de Windows 10, versión 1607, puede optar por quitar la limitación de MAX_PATH sin prepending "\\?\". Consulte la sección "Limitación máxima de longitud de ruta de acceso" de Nombres de archivos, rutas de acceso y espacios de nombres para obtener más información.
[in] fInfoLevelId
Nivel de información de los datos devueltos.
Este parámetro es uno de los FINDEX_INFO_LEVELS valores de enumeración.
[out] lpFindFileData
Puntero a la estructura WIN32_FIND_DATA que recibe información sobre un archivo o subdirectorio encontrado.
[in] fSearchOp
El tipo de filtrado que se va a realizar es diferente de la coincidencia de caracteres comodín.
Este parámetro es uno de los FINDEX_SEARCH_OPS valores de enumeración.
lpSearchFilter
Puntero a los criterios de búsqueda si el fSearchOp especificado necesita información de búsqueda estructurada.
En este momento, ninguno de los valores de fSearchOp admitidos requiere información de búsqueda extendida. Por lo tanto, este puntero debe ser NULL.
[in] dwAdditionalFlags
Especifica marcas adicionales que controlan la búsqueda.
Value | Significado |
---|---|
|
Las búsquedas distinguen mayúsculas de minúsculas. |
[in] hTransaction
Identificador de la transacción. La función CreateTransaction devuelve este identificador.
Valor devuelto
Si la función se ejecuta correctamente, el valor devuelto es un identificador de búsqueda usado en una llamada posterior a FindNextFile o FindClose, y el parámetro lpFindFileData contiene información sobre el primer archivo o directorio encontrado.
Si se produce un error en la función o no se encuentran los archivos de la cadena de búsqueda en el parámetro lpFileName , el valor devuelto se INVALID_HANDLE_VALUE y el contenido de lpFindFileData es indeterminado. Para obtener información de error extendida, llame a la función GetLastError .
Observaciones
La función FindFirstFileTransacted abre un identificador de búsqueda y devuelve información sobre el primer archivo que el sistema de archivos encuentra con un nombre que coincida con el patrón especificado. Esto puede ser o no el primer archivo o directorio que aparece en una aplicación de lista de directorios (por ejemplo, el comando dir) cuando se le asigna el mismo patrón de cadena de nombre de archivo. Esto se debe a que FindFirstFileTransacted no ordena los resultados de la búsqueda. Para obtener más información, consulte FindNextFile.
En la lista siguiente se identifican otras características de búsqueda:
- La búsqueda se realiza estrictamente en el nombre del archivo, no en ningún atributo, como una fecha o un tipo de archivo.
- La búsqueda incluye los nombres de archivo largo y corto.
- Siempre se produce un error al intentar abrir una búsqueda con una barra diagonal inversa final.
- Pasar una cadena no válida, NULL o cadena vacía para el parámetro lpFileName no es un uso válido de esta función. Los resultados en este caso no están definidos.
Una vez establecido el identificador de búsqueda, úselo en la función FindNextFile para buscar otros archivos que coincidan con el mismo patrón con el mismo filtrado que se realiza. Cuando no se necesite el identificador de búsqueda, se debe cerrar mediante la función FindClose .
Como se indicó anteriormente, no puede usar una barra diagonal inversa final (\) en la cadena de entrada lpFileName para FindFirstFileTransacted, por lo que es posible que no sea obvio cómo buscar directorios raíz. Si desea ver archivos u obtener los atributos de un directorio raíz, se aplicarán las siguientes opciones:
- Para examinar los archivos de un directorio raíz, puede usar "C:\*" y recorrer el directorio mediante FindNextFile.
- Para obtener los atributos de un directorio raíz, use la función GetFileAttributes .
En los recursos compartidos de red, puede usar un lpFileName en forma de lo siguiente: "\\server\service*". Sin embargo, no puede usar un lpFileName que apunte al propio recurso compartido; por ejemplo, "\\server\service" no es válido.
Para examinar un directorio que no es un directorio raíz, use la ruta de acceso a ese directorio, sin una barra diagonal inversa final. Por ejemplo, un argumento de "C:\Windows" devuelve información sobre el directorio "C:\Windows", no sobre un directorio o archivo en "C:\Windows". Para examinar los archivos y directorios de "C:\Windows", use un lpFileName de "C:\Windows\*".
Tenga en cuenta que algún otro subproceso o proceso podría crear o eliminar un archivo con este nombre entre el momento en que se consulta el resultado y el momento en que actúa sobre la información. Si se trata de una posible preocupación para la aplicación, una posible solución es usar la función CreateFile con CREATE_NEW (que produce un error si el archivo existe) o OPEN_EXISTING (lo que produce un error si el archivo no existe).
Si está escribiendo una aplicación de 32 bits para enumerar todos los archivos de un directorio y la aplicación se puede ejecutar en un equipo de 64 bits, debe llamar a Wow64DisableWow64FsRedirection antes de llamar a FindFirstFileTransacted y llamar a Wow64RevertWow64FsRedirection después de la última llamada a FindNextFile. Para obtener más información, vea Redirector del sistema de archivos.
Si la ruta de acceso apunta a un vínculo simbólico, el búfer de WIN32_FIND_DATA contiene información sobre el vínculo simbólico, no el destino.
En Windows 8 y Windows Server 2012, esta función es compatible con las siguientes tecnologías.
Tecnología | Compatible |
---|---|
Protocolo bloque de mensajes del servidor (SMB) 3.0 | No |
Conmutación por error transparente (TFO) de SMB 3.0 | No |
SMB 3.0 con recursos compartidos de archivos de escalabilidad horizontal (SO) | No |
Sistema de archivos de volumen compartido de clúster (CsvFS) | No |
Sistema de archivos resistente a errores (ReFS) | No |
SMB 3.0 no admite TxF.
Nota:
El encabezado winbase.h define FindFirstFileTransacted como alias que selecciona automáticamente la versión ANSI o Unicode de esta función en función de la definición de la constante de preprocesador UNICODE. La combinación del uso del alias neutral de codificación con código que no es neutral de codificación puede dar lugar a errores de coincidencia que dan lugar a errores de compilación o tiempo de ejecución. Para obtener más información, vea Convenciones para prototipos de función.
Requisitos
Cliente mínimo compatible | Windows Vista [solo aplicaciones de escritorio] |
Servidor mínimo compatible | Windows Server 2008 [solo aplicaciones de escritorio] |
Plataforma de destino | Windows |
Encabezado | winbase.h (incluya Windows.h) |
Library | Kernel32.lib |
Archivo DLL | Kernel32.dll |