2008-11-03 8 views
11

वर्तमान में लॉक की गई फ़ाइल की प्रतिलिपि बनाने के लिए API कॉल क्या हैं। मैं नेट का उपयोग करने में सक्षम होने की उम्मीद कर रहा हूं, लेकिन Win32 कॉल भी ठीक होगा।मैं प्रोग्राम या विंडोज़ के तहत लॉक की गई फ़ाइल या फ़ोल्डर की प्रतिलिपि कैसे बना सकता हूं?

यूनिक्स, या किसी अन्य ओएस पर समान कार्यक्षमता के बारे में चिंतित होने के लिए स्वतंत्र महसूस करें।

उत्तर

14

आप इस उद्देश्य के लिए वीएसएस (वॉल्यूम छाया प्रतिलिपि सेवा, दृश्य स्रोतसेफ नहीं) API का उपयोग कर सकते हैं। शक्तिशाली होने पर, यह वास्तव में उपयोग में आसान एपीआई नहीं है: Overview of Processing a Backup Under VSS आपको यह पता होना चाहिए कि इसमें क्या शामिल है।

भले ही यह अपेक्षाकृत हालिया एपीआई है, वीएसएस के लिए .NET समर्थन बहुत अधिक (और निष्पक्ष रूप से) कोई नहीं है। आप इंटरऑप के माध्यम से अधिकांश एपीआई को कॉल नहीं कर सकते हैं, और फ्रेमवर्क फ़ाइल फ़ंक्शंस स्नैपशॉट फ़ाइलों का पर्दाफाश करने के लिए कर्नेल नेमस्पेस VSS उपयोगों के साथ काम नहीं करेगा। बोनस के रूप में, भयानक 32/64-बिट और एक्सपी-बनाम-विस्टा मुद्दे हैं, जो तैनाती को रोमांचक बनाते हैं (माइक्रोसॉफ्ट में जिम्मेदार टीम को वास्तव में गर्व होना चाहिए!)

वैसे भी, AlphaVSS प्रोजेक्ट पूरा करने का इरादा रखता है .NET को VSS कार्यक्षमता, और बेहद आशाजनक लगती है, भले ही यह अभी भी प्री-बीटा चरण में है। यह सिर्फ आपके लिए चाल कर सकता है, हालांकि, और यह खुला स्रोत (प्रबंधित सी ++) है।

Win32 का उपयोग करके चीजों को कैसे करें, इसका एक अच्छा उदाहरण के लिए, HoboCopy देखें। उपयोगिता अपने आप पर काफी उपयोगी है, और पूर्ण C++ स्रोत SourceForge project page से भी उपलब्ध है।

5

लगभग another question करने के लिए अपने जवाब के रूप में एक ही:

आप Win32, यह चिह्नित करने के लिए यह रिबूट पर ले जाया जा रहा है, और रिबूट करने के लिए उपयोगकर्ता पूछने के लिए सरकारी रास्ते पर हैं। रीबूट पर फ़ाइल को स्थानांतरित करने के लिए, MoveFileEx का उपयोग MOVEFILE_DELAY_UNTIL_REBOOT ध्वज के साथ करें।

यह वही कार्य है, केवल इस बार आप गंतव्य के रूप में न्यूल पास नहीं करते हैं।

4

आपकी फ़ाइल को वास्तव में लॉक करने के आधार पर, आप या तो System.IO.File.Copy() कर सकते हैं या एक System.IO.BinaryReader और एक System.IO.BinaryWriter बना सकते हैं और मैन्युअल रूप से फ़ाइल की एक प्रति बना सकते हैं लॉक की गई फाइलों के टुकड़े पढ़कर और उन्हें एक नई फाइल में लिखकर। मैंने ऐसी परिस्थितियों को देखा है जहां एक विधि संभव थी लेकिन दूसरा नहीं था, फ़ाइल लॉक क्यों हुई थी।

यह "सभी .NET" उत्तर है।

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

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