2012-06-26 25 views
11

मैं फ़ाइलों को बदलने के लिए निर्देशिका (हजारों फ़ाइलों में से, 5 निर्देशिकाओं के साथ) की निगरानी करना चाहता हूं। मुझे पता है कि जब मैं उस निर्देशिका के अंदर फ़ाइलों को बदलता हूं, तो निर्देशिका को मॉनिटर करने के लिए मैं FSEvents API का उपयोग कर सकता हूं, लेकिन मुझे यह पता लगाना प्रतीत नहीं होता कि यह निर्धारित करने के लिए कि कौन सी फाइलें बदली गई हैं। This संदर्भ से पता चलता है कि मैं एक बाइनरी पेड़ का निर्माण करता हूं और प्रत्येक बार ट्रिगर होने पर पेड़ को पार करता हूं, यह है कि सर्वोत्तम यह निर्धारित करने के लिए कि कौन सी फाइलें बदली गईं? यदि नहीं, तो बेहतर विकल्प क्या हैं?फ़ाइल परिवर्तनों के लिए निर्देशिका देखें

क्या यह निर्देशिका को फिर से स्कैन करना और प्रत्येक फ़ाइल में kqueue संलग्न करना बेहतर है? मुझे यकीन नहीं है कि यह हजारों फाइलों पर कितना अच्छा काम करेगा?

उत्तर

8

मैंने मिश्रित परिणामों से पहले UKKQueue का उपयोग किया है।

मुझे हाल ही में एक बेहतर समाधान के बारे में पता चला है, लेकिन मैंने यह कोशिश नहीं की है। यदि आपको केवल शेर को लक्षित करने की आवश्यकता है, तो मुझे लगता है कि ऐसा करने का नया सर्वोत्तम अभ्यास तरीका NSFileCoordinator का उपयोग करना है। यह इंगित करने के जो निर्देशिका आप (presentedItemURL संपत्ति) में रुचि रखते हैं NSFilePresenter के तरीकों को लागू करने और प्रणाली आपको सूचित करेगी जब एक सब आइटम चाल/परिवर्तन/

मैं अच्छा लगेगा (presentedSubitemDidChangeAtURL: तरह के तरीकों के माध्यम से) हटा दी जाती है यह सुनकर कि अगर आप उस मार्ग पर जाते हैं तो यह कैसे काम करता है।

+0

जेसी, क्या आपने अभी तक कुछ फ़ोल्डर की निगरानी लागू करने के लिए NSFileCoordinator/NSFilePresenter का उपयोग करने का प्रयास किया है? मैं इस समाधान को काम करने में सक्षम नहीं था-यह मुझे किसी भी घटना के बारे में सूचित नहीं करता है। –

+0

@ डेव न्यूमैन एनएसफ़ाइलकॉर्डिनेटर केवल तभी काम करता है जब परिवर्तन करने वाला प्रोग्राम इसका उपयोग कर रहा हो। (यानी यह एक ऑप्ट-इन एपीआई है) अधिकांश कोको कार्यक्रम यह करेंगे; क्या आप निम्न स्तर वाले एपीआई द्वारा किए जा रहे परिवर्तनों को देख रहे हैं? –

+0

मुझे समझ में नहीं आता है। उदाहरण के लिए, मैंने अपने फ़ोल्डर के लिए एक फ़ाइल प्रस्तुतकर्ता बनाया है, कहें, '/ उपयोगकर्ता/डेव/माईफोल्डर'। अब जब मैं इस निर्देशिका में फ़ाइलों को खींचता हूं (ड्रैग और ड्रॉप), केवल 'प्रस्तुत सबमिट किया गया है DidChangeAtURL:' विधि सिस्टम द्वारा बुलाया जा रहा है, लेकिन 'सबमिट नहीं किया गया है सबमिट करें AbidemDidAppearAtURL: '। जब मैं खोजक में कुछ फाइलों को हटाता हूं तो यह 'accommodatePresentedSubitemDeletionAtURL' को भी कॉल नहीं करता है। क्या मैं कुछ भूल गया? –

6

यदि आप kFSEventStreamCreateFlagFileEvents का उपयोग करके अपनी स्ट्रीम बनाते हैं तो आपको देखे गए निर्देशिका में परिवर्तन की अधिसूचना के बजाय प्रत्येक फ़ाइल में परिवर्तनों के लिए ईवेंट मिलेंगे। दुर्भाग्य से यह केवल ओएसएक्स 10.7 और बाद में उपलब्ध है।

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