Sto guardando una directory chiamando lo ReadDirectoryChangesW
in modo sincrono. Quando un nuovo file è disponibile, provo ad accedervi immediatamente con CreateFile
con GENERIC_READ
e FILE_SHARE_READ
, ma questo mi dà ERROR_SHARING_VIOLATION
. Il processo che inserisce il file nella directory controllata non termina la scrittura quando cerco di leggerlo.Attendere fino a quando un file è disponibile per la lettura con Win32
C'è un modo per attendere in modo affidabile finché il file non è disponibile per la lettura? Posso mettere il metodo in un loop come quello qui sotto, ma spero che ci sia un modo migliore.
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 (...);
Presumo che questo sia C++? Se è C#, esiste un oggetto SystemFileWatcher nel BCL che è possibile utilizzare. –
Win32 == C API, mi ripeterò. – dreamlax