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 (...);