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 derechos de acceso y seguridad de archivos.
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 ejecuta correctamente, el valor devuelto es distinto de cero.
Si se produce un error en la función, 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 de 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 FALSEy GetLastError devuelve ERROR_INVALID_HANDLE.
Observaciones
Normalmente, las 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 realiza varias escrituras en el disco y también necesita asegurarse de que los datos críticos se escriben en medios persistentes, la aplicación debe usar E/S sin búfer 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, vea 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 obtener más información, vea En ejecución con privilegios especiales.
Al abrir un volumen con CreateFile, la cadena lpFileName debe ser la siguiente forma: \\.\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 siguientes tecnologías.
Tecnología | Soportado |
---|---|
Protocolo bloque de mensajes del servidor (SMB) 3.0 | Sí |
Conmutación por error transparente (TFO) de SMB 3.0 | Sí |
SMB 3.0 con recursos compartidos de archivos de escalabilidad horizontal (SO) | Sí |
Sistema de archivos de volumen compartido de clúster (CsvFS) | Sí |
Sistema de archivos resistente (ReFS) | Sí |
Ejemplos
Para obtener un ejemplo, vea servidor de canalización multiproceso.
Requisitos
Requisito | Valor |
---|---|
cliente mínimo admitido | Windows XP [aplicaciones de escritorio | Aplicaciones para UWP] |
servidor mínimo admitido | Windows Server 2003 [aplicaciones de escritorio | Aplicaciones para UWP] |
de la plataforma de destino de |
Windows |
encabezado de |
fileapi.h (incluya Windows.h) |
biblioteca de |
Kernel32.lib |
DLL de |
Kernel32.dll |