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 a lo sumo 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 a lo sumo 63 milisegundos de esperas solicitadas; el scheduling del sistema operativo y la duración de la syscall determinan el tiempo real transcurrido

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 y reportan el último error de Windows capturado; los demás errores del sistema operativo fallan de inmediato

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 lock transitorio en otro hilo, conservan locks permanentes, cancelan durante el reintento y prueban reemplazo sobre un archivo de solo lectura

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

Un sondeo separado de solo WinAPI reproduce el fallo intermitente original de access-denied sin HotPDF ni Cairo; esto identifica la frontera de publicación sin atribuir la causa a un proceso no observado

SaveToFile · Workflows de firma