2011-01-31 15 views
5

का उपयोग कर निर्देशिका में फ़ाइल परिवर्तनों की निगरानी करने का विश्वसनीय तरीका मैं निर्देशिका में परिवर्तनों की तलाश करने का एक विश्वसनीय तरीका ढूंढ रहा हूं।.NET Framework

मैं FileSystemWatcher उपयोग करने की कोशिश की है, लेकिन यह नहीं बल्कि गलत जब कई छोटे फ़ाइलें, बनाई गई हैं बदल गया है या नष्ट कर दिया है। यह मेरे परीक्षणों में फाइलों के बारे में 1 या 2% याद करता है। जब आप हजारों फ़ाइलों को तेजी से जोड़ रहे हैं या बदल रहे हैं तो यह काफी है।

मैं अलग अंतराल पर बदलाव के लिए मतदान की कोशिश की है 500 एमएस, 2000 एमएस आदि इस मामले मैं बहुत अधिक हिट मिल में। FileInfo ऑब्जेक्ट पर टाइमस्टैम्प के रिज़ॉल्यूशन के साथ इसका कुछ संबंध हो सकता है।

तो मेरा सवाल है; निर्देशिका में बदलावों को विश्वसनीय रूप से बदलने के लिए, .NET Framework का उपयोग करना संभव है?

- ईसाई

उत्तर

7

आप InternalBufferSize बढ़ रही करने की कोशिश की है? आपने इसे किस आकार में सेट किया है?

MSDN से

:


नोट एक FileSystemWatcher एक घटना वंचित रह सकते हैं जब बफर आकार को पार कर गया है। लापता घटनाओं से बचने के लिए का पालन इन दिशानिर्देशों: InternalBufferSize संपत्ति की स्थापना द्वारा बफर आकार बढ़ाएँ। लंबे फ़ाइल नामों के साथ देख फ़ाइलें, से बचें क्योंकि एक लंबे फ़ाइल नाम बफर भरने के लिए योगदान देता है। कम नामों का उपयोग करके इन फ़ाइलों का नाम बदलने पर विचार करें।


यथासंभव कम अपने ईवेंट प्रबंधन कोड रखें।

+0

धन्यवाद, यह अब के लिए मेरी समस्याओं का समाधान लगता है। 64 KB के बफर वाले फ़ाइलों को याद नहीं कर सकते हैं, इष्टतम सेटिंग्स को खोजने के लिए कुछ और परीक्षण चलाएं। –

4

हाँ, उचित निगरानी फ़ाइल सिस्टम फिल्टर ड्राइवर का उपयोग किया जाता है। इस तरह के चालक फाइल सिस्टम पर जाने वाले सभी अनुरोधों को सही तरीके से रोकते हैं (या तो फाइल सिस्टम तक पहुंचने से पहले या बाद में)। इस तरह आपको सभी सूचनाएं मिलती हैं, सही समय पर (या घटना होने से पहले भी) और आप नियंत्रित कर सकते हैं कि कौन से अनुरोध पास हैं और अनुरोध के साथ कौन सी जानकारी पास की जाती है।

आप इस तरह के फ़िल्टर ड्राइवर को लिख सकते हैं (~ 6-9 9 महीने के काम को सही करने के लिए, और फिर परीक्षण के लिए बहुत समय) या आप हमारे CallbackFilter उत्पाद का उपयोग कर सकते हैं और कर्नेल-मोड विकास से बच सकते हैं। CallbackFilter .NET, VCL और देशी C++ के लिए पूर्व-निर्मित ड्राइवर और API प्रदान करता है।

+1

सुझाव यूजीन, मैं वास्तव में जब एक परियोजना है कि रद्द कर दिया गया के लिए शोध करने से पहले अपने CallbackFilter पर ध्यान दिया है के लिए धन्यवाद। यह एक शौक परियोजना है इसलिए मुझे इसे अभी आसान रखना होगा। लेकिन आपको दिमाग में रखेगा;) –

+3

@ यूजीन: यह उत्तर दो उपयोगकर्ताओं द्वारा स्पैम के रूप में फ़्लैग किया गया है। मुझे विश्वास नहीं है कि यह है, क्योंकि (क्षेत्र में एक विशेषज्ञ होने के बावजूद) ऐसा लगता है कि वास्तव में आपके उत्पाद की समस्या * समाधान प्रदान करती है। हालांकि, भविष्य में आप इसे और अधिक स्पष्ट बनाने पर विचार करना चाहेंगे कि आप अपने उत्पाद का प्रचार कर रहे हैं। शायद नीचे या कुछ पर एक अस्वीकरण। और डाउनवॉट्स का मुकाबला करने के लिए +1। –

+1

@Cody ग्रे - वाक्यांश "हमारे ... उत्पाद" एक साथ उपयोगकर्ता नाम के साथ यह कहता है कि काफी स्पष्ट रूप, मेरे लिए के रूप में, और इस से पहले संबोधित किया गया है (दोनों मेटा पर चर्चा की और यहाँ का परीक्षण) और स्वीकार किए जाते हैं। –