Estoy viendo un directorio llamando al ReadDirectoryChangesW
sincrónicamente. Cuando hay un archivo nuevo disponible, intento acceder de inmediato con CreateFile
con GENERIC_READ
y FILE_SHARE_READ
, pero esto me da ERROR_SHARING_VIOLATION
. El proceso que coloca el archivo en el directorio supervisado no termina de escribirse cuando intento leerlo.Esperando hasta que haya un archivo disponible para leer con Win32
¿Hay alguna manera de esperar de manera confiable hasta que el archivo esté disponible para la lectura? Puedo poner el método en un ciclo como el siguiente, 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 (...);
Supongo que esto es C++? Si es C#, hay un objeto SystemFileWatcher en el BCL que puede usar. –
Win32 == C API, voy a volver a etiquetar. – dreamlax