Publicación atómica de archivos en Windows

El guardado de documentos headless prepara y vuelca un archivo de staging exclusivo en el directorio de destino antes de publicar sus bytes completos mediante reemplazo atómico

En Windows, los fallos transitorios ERROR_ACCESS_DENIED, ERROR_SHARING_VIOLATION y ERROR_LOCK_VIOLATION permiten como máximo ocho intentos de MoveFileEx con MOVEFILE_REPLACE_EXISTING y MOVEFILE_WRITE_THROUGH

Las esperas entre intentos son de 1, 2, 4, 8, 16, 16 y 16 milisegundos, sumando como máximo 63 milisegundos de esperas solicitadas; la planificación del sistema operativo y la duración de las syscalls determinan el tiempo transcurrido real

La cancelación se observa antes de cada intento y antes y después de cada espera; un reemplazo atómico exitoso completado es la frontera de publicación

Los bloqueos permanentes o restricciones de acceso preservan el destino original e informan el último error de Windows capturado; otros errores del sistema operativo fallan inmediatamente

Los guardados de documentos fallidos limpian sus archivos de staging propios; la publicación no borra un destino existente ni hace fallback a una copia parcial

La misma ruta privada publica guardados ordinarios, PDFs firmados y timestamps de documento independientes; Linux sigue usando su ruta de fsync y rename

Aceptación real

Las pruebas retienen handles de Windows reales que niegan el borrado, liberan un bloqueo transitorio en otro hilo, conservan bloqueos permanentes, cancelan durante el reintento e intentan un reemplazo de solo lectura

Cada objetivo de Windows también realiza 500 reemplazos atómicos completos y 50 guardados reales de documentos con recarga nativa, preservando los bytes de la fuente y comprobando la limpieza de los archivos de staging

Una sonda separada de solo WinAPI reproduce el fallo original intermitente de acceso denegado sin HotPDF ni Cairo; esto identifica la frontera de publicación sin atribuir la causa a un proceso no observado

SaveToFile · Workflows de firma