Tôi đang xem một thư mục bằng cách gọi ReadDirectoryChangesW
đồng bộ. Khi có tệp mới, tôi cố gắng truy cập ngay lập tức với CreateFile
với GENERIC_READ
và FILE_SHARE_READ
, nhưng điều này mang lại cho tôi ERROR_SHARING_VIOLATION
. Quá trình đưa tập tin vào thư mục đã xem không hoàn thành bằng văn bản vào lúc tôi cố đọc nó.Chờ cho đến khi có tệp để đọc với Win32
Có cách nào đáng tin cậy để chờ cho đến khi tệp có sẵn để đọc không? Tôi có thể đặt phương pháp vào một vòng lặp như một bên dưới, nhưng tôi hy vọng có một cách tốt hơn.
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 (...);
Tôi cho rằng đây là C++? Nếu nó là C#, có một đối tượng SystemFileWatcher trong BCL mà bạn có thể sử dụng. –
Win32 == C API, tôi sẽ gắn thẻ lại. – dreamlax