Esperando hasta que un archivo esté disponible para leer con Win32

Estoy viendo un directorio llamandoReadDirectoryChangesW sincrónicamente Cuando hay un nuevo archivo disponible, trato de acceder a él inmediatamente conCreateFile conGENERIC_READ yFILE_SHARE_READ, pero esto me daERROR_SHARING_VIOLATION. El proceso que puso el archivo en el directorio visto no termina de escribirse cuando intento leerlo.

¿Hay alguna forma de esperar de manera confiable hasta que el archivo esté disponible para su lectura? Puedo poner el método en un bucle como el de abajo, pero espero que haya una mejor manera.

while ((hFile = CreateFile (path, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL)) == INVALID_HANDLE_VALUE)
{
    if (GetLastError() == ERROR_SHARING_VIOLATION)
        Sleep (500);
    else
        break; // some other error occurred
}

if (hFile == INVALID_HANDLE_VALUE)
{
    // deal with other error
    return 0;
}

ReadFile (...);

Respuestas a la pregunta(4)

Su respuesta a la pregunta