2009-05-03 13 views
5

मैं एक उपयोगिता अनुप्रयोग बना रहा हूं जो मैक ओएसएक्स के लिए दो सिस्टमों में फ़ाइलों को सिंक्रनाइज़ करता है। मुझे यह पता लगाने की आवश्यकता है कि फ़ाइल का नाम बदल दिया गया है लेकिन अन्यथा एक ही फाइल है। कोको में मैं यह कैसे करूं?मैं कैसे पता लगाता हूं कि कोको का उपयोग करके फ़ाइल का नाम बदल दिया गया है या नहीं?

+0

अच्छा सवाल है, लेकिन मुझे संदेह है कि एक तरीका है। –

+0

पहले से ही पूछा और उत्तर दिया? http://stackoverflow.com/questions/645321/how-to-dectect-new-or-modified-files-in-mac-osx/645379#645379 –

उत्तर

3

कोई आसान जवाब नहीं है; आपको अपने ऐप के लिए सबसे अच्छी रणनीति का पता लगाने की जरूरत है।

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

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

0

आप एनएसएफइल मैनेजर द्वारा लौटाए गए गुणों में इनोड नंबर (NSFileSystemFileNumber) देख सकते हैं, जिसमें सरल नामकरण मामलों को शामिल किया जाएगा।

1

अतिरिक्त विवरण के एक जोड़े है कि मैं का सामना करना पड़ा:

तो फ़ाइल केवल नाम बदला है, तो फ़ाइल एक ही inode (NSFileSystemFileNumber) बनी रहेगी।

हालांकि, अगर फ़ाइल संशोधित की गई थी, तो मैक ओएस एक्स आम तौर पर पुरानी फ़ाइल को नई फ़ाइल की एक प्रति के साथ प्रतिस्थापित करेगा, इसलिए इनोड संख्याएं समान नहीं होंगी।

यदि आप टेक्स्ट एडिट में एक टेक्स्ट फ़ाइल संपादित करते हैं और फिर इसे सहेजते हैं, तो आप फ़ाइल गायब होने और फिर खोजक में फिर से दिखाई दे सकते हैं। हालांकि, अगर आप कमांड लाइन एडिटर (vi, pico, emacs, आदि) का उपयोग करके इस फ़ाइल को संपादित करते हैं, तो यह सीधे फ़ाइल में सहेजा जाएगा।

मेरा अनुमान है कि कोको ऐप्स पहले एक temp फ़ाइल में सहेजेंगे, और फिर फ़ाइल के मूल संस्करण को प्रतिस्थापित करेंगे, जो बताता है कि इनोड्स अलग क्यों हैं।

+0

मेरे पास उपर्युक्त समस्या है क्या आप कृपया मुझे वैकल्पिक समाधान बता सकते हैं जब फ़ाइल संशोधित की जाती है तो विशिष्ट रूप से पहचाने जाने के लिए ?? आप इस लिंक से भी एक उत्तर दे सकते हैं: http://stackoverflow.com/questions/30191016/is-there-any-function-to-retrieve-the-path-associated-with-an-nsfilesystemfilenu – jigs

0

मुझे लगता है कि आप फ़ाइलों की सामग्री पर लक्षित हैं, न कि उनके गुण। हैश की गणना और तुलना करने का सबसे आसान तरीका है। बस ब्लॉक द्वारा ब्लॉक की गई दो फाइलें पढ़ें और हैश की तुलना करें, ई। जी। इन MD5 दिनचर्या के साथ।

0

ऊपर वर्णित सब कुछ विफल हो जाएगा यदि आपके पास विभिन्न प्लेटफ़ॉर्म/ओएस पर स्रोत और गंतव्य है। सबसे अच्छा तरीका नई फाइलों की सूची प्राप्त करना और स्रोत और गंतव्य स्थानों दोनों में फ़ाइलों को गुम करना है और फिर यदि किसी भी दो फाइलों का आकार समान है? यदि उनके पास समान आकार है तो चेकसम/सीआरसी की तुलना करें और यदि यह समान है, तो उनमें से एक का नाम बदल दिया गया है।

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

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