Función FlushFileBuffers (fileapi.h)

Vacía los búferes de un archivo especificado y hace que todos los datos almacenados en búfer se escriban en un archivo.

Sintaxis

BOOL FlushFileBuffers(
  [in] HANDLE hFile
);

Parámetros

[in] hFile

Identificador del archivo abierto.

El identificador de archivo debe tener el derecho de acceso GENERIC_WRITE . Para obtener más información, vea Seguridad de archivos y derechos de acceso.

Si hFile es un identificador de un dispositivo de comunicaciones, la función solo vacía el búfer de transmisión.

Si hFile es un identificador para el extremo del servidor de una canalización con nombre, la función no devuelve hasta que el cliente haya leído todos los datos almacenados en búfer de la canalización.

Valor devuelto

Si la función se realiza correctamente, el valor devuelto es distinto de cero.

Si la función no se realiza correctamente, el valor devuelto es cero. Para obtener información de error extendida, llame a GetLastError.

Se produce un error en la función si hFile es un identificador para la salida de la consola. Esto se debe a que la salida de la consola no está almacenada en búfer. La función devuelve FALSE y GetLastError devuelve ERROR_INVALID_HANDLE.

Comentarios

Normalmente, las funciones WriteFile y WriteFileEx escriben datos en un búfer interno que el sistema operativo escribe en un disco o canalización de comunicación de forma periódica. La función FlushFileBuffers escribe toda la información almacenada en búfer para un archivo especificado en el dispositivo o canalización.

Debido a las interacciones de almacenamiento en caché de disco dentro del sistema, la función FlushFileBuffers puede ser ineficaz cuando se usa después de cada escritura en un dispositivo de unidad de disco cuando se realizan muchas escrituras por separado. Si una aplicación está realizando varias escrituras en el disco y también debe asegurarse de que los datos críticos se escriben en medios persistentes, la aplicación debe usar E/S sin búferes en lugar de llamar con frecuencia a FlushFileBuffers. Para abrir un archivo para E/S sin búfer, llame a la función CreateFile con las marcas FILE_FLAG_NO_BUFFERING y FILE_FLAG_WRITE_THROUGH . Esto evita que el contenido del archivo se almacene en caché y vacía los metadatos en el disco con cada escritura. Para obtener más información, consulte CreateFile.

Para vaciar todos los archivos abiertos en un volumen, llame a FlushFileBuffers con un identificador para el volumen. El autor de la llamada debe tener privilegios administrativos. Para más información, consulte Ejecución con privilegios especiales.

Al abrir un volumen con CreateFile, la cadena lpFileName debe tener el siguiente formato: \.\x: o \?\Volume{GUID}. No use una barra diagonal inversa final en el nombre del volumen, ya que indica el directorio raíz de una unidad.

En Windows 8 y Windows Server 2012, esta función es compatible con las tecnologías siguientes.

Tecnología Compatible
Protocolo Bloque de mensajes del servidor (SMB) 3.0
Conmutación por error transparente (TFO) de SMB 3.0
SMB 3.0 con recursos compartidos de archivos de escalabilidad horizontal (SO)
Sistema de archivos de Volumen compartido de clúster (CsvFS)
Sistema de archivos resistente a errores (ReFS)
 

Ejemplos

Para obtener un ejemplo, consulte Servidor de canalización multiproceso.

Requisitos

   
Cliente mínimo compatible Windows XP [aplicaciones de escritorio | aplicaciones para UWP]
Servidor mínimo compatible Windows Server 2003 [aplicaciones de escritorio | aplicaciones para UWP]
Plataforma de destino Windows
Encabezado fileapi.h (incluya Windows.h)
Library Kernel32.lib
Archivo DLL Kernel32.dll

Vea también

CreateFile

Funciones de administración de archivos

WriteFile

WriteFileEx