Compartir a través de


Función FindFirstFileTransactedA (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 a través de técnicas más sencillas y disponibles con mayor facilidad. 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 un directorio para 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 transaccionada de la función FindFirstFileEx.

Para obtener la versión más básica de esta función, consulte FindFirstFile.

Sintaxis

HANDLE FindFirstFileTransactedA(
  [in]  LPCSTR             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

El directorio o la ruta de acceso y el nombre del 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 finalizar en una barra diagonal inversa final (\).

Si la cadena termina con un carácter comodín, un punto (.) o un nombre de directorio, el usuario debe tener acceso a la raíz y a todos los subdirectorios de la ruta de acceso.

De forma predeterminada, el nombre se limita 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 Archivos de nomenclatura, rutas de acceso y espacios de nombres.

Propina

A partir de Windows 10, versión 1607, puedes optar por quitar la limitación del MAX_PATH sin tener que prepending "\\?\". Consulte la sección "Limitación máxima de longitud de ruta de acceso" de Archivos de nomenclatura, rutas de acceso y espacios de nombres para obtener más información.

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.

[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 admitidos fSearchOp 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.

Valor Significado
FIND_FIRST_EX_CASE_SENSITIVE
1
Las búsquedas distinguen mayúsculas de minúsculas.

[in] hTransaction

Identificador de la transacción. El 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 FindClosey 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 pueden encontrar archivos de la cadena de búsqueda en el parámetro lpFileName, el valor devuelto se INVALID_HANDLE_VALUE y el contenido de lpFindFileData son indeterminados. 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 o no ser el primer archivo o directorio que aparece en una aplicación de lista de directorios (como 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 largos y cortos.
  • Siempre se produce un error al intentar abrir una búsqueda con una barra diagonal inversa final.
  • Pasar una cadena no válida, nullo una 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.
Nota En raras ocasiones, es posible que la información del archivo en los sistemas de archivos NTFS no esté actualizada en el momento en que se llama a esta función. Para asegurarse de obtener la información actual del archivo, llame a la función GetFileInformationByHandle.
 
Si el sistema de archivos subyacente no admite el tipo de filtrado especificado, aparte del filtrado de directorios, findFirstFileTransacted produce el error ERROR_NOT_SUPPORTED. La aplicación debe usar FINDEX_SEARCH_OPS tipo FileExSearchNameMatch y realizar su propio filtrado.

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 está realizando. Cuando no se necesite el identificador de búsqueda, debe cerrarse mediante la función FindClose.

Como se indicó anteriormente, no puede usar una barra diagonal inversa final (\) en el lpFileName cadena de entrada para FindFirstFileTransacted, por lo tanto, puede que no sea obvio cómo buscar directorios raíz. Si desea ver archivos o 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.
Nota La cadena "\\?\\" no permite el acceso al directorio raíz.
 

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 consiste en usar la función CreateFile con CREATE_NEW (lo 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 FindFirstFileTransact 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 Soportado
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 (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 Conventions for Function Prototypes.

Requisitos

Requisito Valor
cliente mínimo admitido Windows Vista [solo aplicaciones de escritorio]
servidor mínimo admitido Windows Server 2008 [solo aplicaciones de escritorio]
de la plataforma de destino de Windows
encabezado de winbase.h (incluya Windows.h)
biblioteca de Kernel32.lib
DLL de Kernel32.dll

Consulte también

funciones de administración de archivos

FindClose

FindNextFile

GetFileAttributes

SetFileAttributes

vínculos simbólicos

NTFS transaccional

WIN32_FIND_DATA