Oglądam katalog, dzwoniąc pod numer ReadDirectoryChangesW
synchronicznie. Kiedy nowy plik jest dostępny, próbuję uzyskać do niego natychmiastowy dostęp za pomocą CreateFile
z GENERIC_READ
i FILE_SHARE_READ
, ale to daje mi ERROR_SHARING_VIOLATION
. Proces, który umieścił plik w obserwowanym katalogu, nie kończy zapisu, gdy spróbuję go odczytać.Oczekiwanie, aż plik będzie dostępny do odczytu za pomocą Win32
Czy istnieje sposób na niezawodne oczekiwanie, aż plik będzie dostępny do odczytu? Mogę umieścić tę metodę w pętli podobnej do poniższej, ale mam nadzieję, że jest lepszy sposób.
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 (...);
Zakładam, że to jest C++? Jeśli jest to C#, istnieje obiekt SystemFileWatcher w BCL, którego możesz użyć. –
Win32 == C API, będę retag. – dreamlax