2011-04-23 13 views
5

संभव डुप्लिकेट:
Delphi notification when a file gets updatedडेल्फी एक्सई में फ़ाइलों के लिए निर्देशिका की निगरानी कैसे करें?

आवश्यकता फ़ाइलों को बनाने और उन्हें गिनती के लिए निगरानी। ओएस: विनएक्सपी और उच्च।

उत्तर

5

आप this article पर एक नज़र (ए निर्देशिका मॉनिटर कक्षा डेल्फी के लिए) लेने के लिए चाहते हो सकता है, और यह भी विंडोज एपीआई से इस समारोह में: ReadDirectoryChanges

तुम भी, क्योंकि यह अनुरूप बन इस तो सवाल पर एक नज़र रखना चाहिए आपकी ज़रूरतें: Delphi notification when a file gets updated

4

पिछले साल मुझे वही आवश्यकता थी और इज़टोक कैसीन की निर्देशिका देखें: http://www.cromis.net/blog/downloads/directory-watch/। उन्होंने ईमेल का जवाब दिया और मेरे सवालों के जवाब देने में बहुत मददगार था।

उनकी कोड काम किया है, लेकिन मैं एक विशिष्ट फ़ोल्डर था बंद कर दिया, जो कुछ अजीब कारण ReadDirectoryChanges एपीआई (जिस पर यह निर्भर करता है) के लिए Microsoft से (विक्षिप्त की तरह) नहीं करता है 'में इस समय एक फ़ाइल में सूचित कर दिया करने के लिए आवश्यक टी प्रदान करते हैं। मुझे यह भी याद आ रहा है कि इज़टोक के कोड ने धागे का इस्तेमाल किया था और मेरी जरूरतों के लिए हल्के वजन को महसूस नहीं किया था।

मैं एक आश्चर्यजनक सरल दृष्टिकोण का उपयोग कर समाप्त हुआ जिसने मेरे लिए अद्भुत काम किया है। एक टीटीमर घटना पर जो हर कुछ सेकंड में आग लगती है, मैं उस फ़ोल्डर पर FindFirst का उपयोग करता हूं जिस पर मैं निगरानी कर रहा हूं। पाए गए सभी फाइलें लगातार TStringList में रखी जाती हैं। पिछली टीटीमर घटनाओं से स्ट्रिंगलिस्ट में पहले से मौजूद कोई भी फ़ाइल नई नहीं है। (यह पता लगाने के लिए कि कोई फ़ाइल बंद है या नहीं, मैं फ़ाइल को अनन्य मोड में खोलने का प्रयास करता हूं। अगर मैं इसे नहीं खोल सकता, तो यह TStringList में नहीं जोड़ा गया है, इसलिए यह अगले ईवेंट पर चेक किया गया है।)

मैं काफी था इस दृष्टिकोण का उपयोग करने में संकोच करते हुए, यह सोचकर कि यह बहुत क्रूर बल था। लेकिन, मेरी ज़रूरतों के लिए, इस समाधान ने आश्चर्यजनक रूप से काम किया है और शुक्र है, इसमें बहुत सरल कोड शामिल है जो समझने और बनाए रखने में आसान है।

एचटीएच

+0

किसी ने उपर्युक्त उत्तर क्यों दिया? – RobertFrank

+0

कौन जानता है? ... वास्तव में यह काफी परेशान है। समाधान वैध होने के बाद +1 क्षतिपूर्ति करने के लिए। – yms

+0

कृपया ध्यान दें कि उस पुस्तकालय में एक छोटी सी बग है। आपको TDirWatchThread.Execute (सिग्नल एरर (त्रुटि संदेश) के बाद टर्मिनेट जोड़ने की आवश्यकता है) - इसके बिना जब आप फ़ोल्डर से सभी फाइलों को हटाते हैं तो फ़ोल्डर एक अनंत लूप में प्रवेश करता है तो फ़ोल्डर स्वयं! – Ampere

संबंधित मुद्दे