के साथ पढ़ने के लिए फ़ाइल उपलब्ध होने तक प्रतीक्षा कर रहा है, मैं ReadDirectoryChangesW
को सिंक्रनाइज़ करके कॉल करके एक निर्देशिका देख रहा हूं। जब कोई नई फ़ाइल उपलब्ध होती है, तो मैं इसे CreateFile
GENERIC_READ
और FILE_SHARE_READ
के साथ तुरंत एक्सेस करने का प्रयास करता हूं, लेकिन यह मुझे ERROR_SHARING_VIOLATION
देता है। जिस प्रक्रिया को फ़ाइल को देखे गए निर्देशिका में रखा गया है, वह उस समय तक लिखना समाप्त नहीं करता जब तक मैं इसे पढ़ने की कोशिश नहीं करता।Win32
क्या फ़ाइल पढ़ने के लिए उपलब्ध होने तक विश्वसनीय रूप से प्रतीक्षा करने का कोई तरीका है? मैं विधि को नीचे की तरह एक लूप में डाल सकता हूं, लेकिन मुझे उम्मीद है कि एक बेहतर तरीका है।
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 (...);
मुझे लगता है कि यह सी ++ है? यदि यह सी # है, तो बीसीएल में एक SystemFileWatcher ऑब्जेक्ट है जिसका आप उपयोग कर सकते हैं। –
Win32 == सी एपीआई, मैं पीछे हट जाऊंगा। – dreamlax