2008-08-19 24 views
17

मैं विंडोज प्रोग्रामिंग के लिए नया हूं और मैं फाइल सिस्टम में सभी बदलावों की अधिसूचना प्राप्त करने की कोशिश कर रहा हूं (SysInternals से FileMon प्रदर्शित करता है, लेकिन एक एपीआई के माध्यम से)। क्या प्रत्येक (गैर-नेटवर्क, गैर-प्रतिस्थापित) ड्राइव के लिए FindFirstChangeNotification है मेरी सबसे अच्छी शर्त है या क्या अन्य उपयुक्त सी/सी ++ एपीआई हैं?FindFirstChangeNotification विंडोज़ पर फ़ाइल सिस्टम परिवर्तन अधिसूचना के लिए उपयोग करने के लिए सबसे अच्छा एपीआई है?

उत्तर

22

FindFirstChangeNotification ठीक है, लेकिन थोड़ा अधिक परम शक्ति के लिए आप ReadDirectoryChangesW. का उपयोग करना चाहिए, (वास्तव में, यह भी दस्तावेज में सुझाव दिया गया है!)

यह एक समारोह सूचक की आवश्यकता नहीं है यह आप मैन्युअल रूप से करने के लिए आवश्यकता होती है कच्चे बफर को डीकोड करें, यह यूनिकोड फ़ाइल नामों का उपयोग करता है, लेकिन यह आमतौर पर बेहतर और अधिक लचीला होता है।

दूसरी तरफ, यदि आप फ़ाइलमोन करना चाहते हैं, तो आपको संभवतः फ़ाइलमोन करना चाहिए और IFS to create and install a file system filter का उपयोग करना चाहिए।

+0

मैं अंत में ReadDirectoryChangesW के लिए गया था और मज़ेदार काम कर रहा था कि बफर को एक रूप में वापस कैसे परिवर्तित किया जाए, मैं अपने जावा कोड पर वापस जा सकता हूं, लेकिन यह निश्चित रूप से मैं चाहता हूं। –

+0

sry मैं दुर्घटना से नीचे गिर गया अब मैं ऊपर नहीं जा सकता – clyfe

0

ऐसा करने के अन्य तरीके हैं, लेकिन उनमें से अधिकतर आपके हिस्से पर प्रयास शामिल करते हैं (या अपने ऐप से प्रदर्शन लेते हैं, या आपको थ्रेड को ब्लॉक करने के लिए ब्लॉक करना पड़ता है)। FindFirstChangeNotification थोड़ा जटिल है यदि आप फ़ंक्शन पॉइंटर्स से निपटने के लिए उपयोग नहीं करते हैं, लेकिन इसमें आपके लिए काम का बड़ा हिस्सा करने के लिए ओएस प्राप्त करने का गुण है।

-1

आप FileSystemWatcher क्लास का उपयोग कर सकते हैं। बहुत कुशल लेकिन नेटवर्क साझा ड्राइव के साथ काम नहीं कर सकता।

0

असल में FileSystemWatcher साझा नेटवर्क ड्राइव के साथ पूरी तरह से काम करता है। मैं इसे अभी एक एप्लिकेशन में उपयोग कर रहा हूं, जिसमें अन्य चीजों के साथ, परिवर्तन के लिए फाइल सिस्टम पर नज़र रखता है। (Www.tabbles.net)।