अस्वीकरण: मैं तुरंत स्वीकार करूंगा कि फाइल सिस्टम कैसे काम करता है, इस बारे में विवरण के बारे में मुझे अज्ञानता की उचित मात्रा है। मैं इतने लंबे समय तक एनटीएफएस का उपयोग कर रहा हूं कि मैंने जो व्यवहार देखा है, उसके साथ-साथ जो भी मैंने इंटरनेट पर डोरकिंग से सीखा है, उसके बारे में बता रहा हूं - हालांकि ...यह पता लगाना कि फ़ाइल.मोव को 'कॉपी -> डिलीट' की आवश्यकता होगी या फ़ाइल सिस्टम टेबल
मैं उम्मीद कर रहा था कि वहां है यह पता लगाने का एक तरीका है कि 'स्थान ए' से 'स्थान बी' तक फ़ाइल को स्थानांतरित करते समय, क्या ऑपरेशन को 'File.Copy -> File.Delete' के बराबर की आवश्यकता होगी या यदि यह वास्तविक फ़ाइल डेटा की प्रतिलिपि नहीं करेगा, लेकिन बस 'मास्टर फ़ाइल टेबल' या जैसे स्थान में स्थान अपडेट करें।
विभिन्न उद्देश्यों के लिए, मैं कभी-कभी बड़ी संख्या में बड़ी फ़ाइलों को स्थानांतरित करता हूं। मैं यूआई में प्रगति की रिपोर्ट करना चाहता हूं।
मुझे एहसास है कि जब मैं File.Move को कॉल करता हूं और एक डिस्क/विभाजन पर किसी स्थान से फ़ाइल को स्थानांतरित करता हूं, तो फ़ंक्शन को डिस्क/विभाजन के बीच प्रभावी रूप से फ़ाइल डेटा कॉपी करना होगा। जब यह इस स्थिति से मुकाबला करता है, तो मैं यह पता लगाने में सक्षम होना चाहता हूं कि ऐसा होगा इसलिए मैं कोड का उपयोग कर सकता हूं जिसे मैंने लिखा है जो फ़ाइल की प्रतिलिपि बनायेगा और विस्तृत प्रगति रिपोर्टिंग देगा क्योंकि बाइट्स को स्थानांतरित किया जाता है, इसलिए मैं अक्सर UI में प्रगति बार अपडेट कर सकता हूं।
जब यह एक ही डिस्क/विभाजन पर होता है, क्योंकि मास्टर फ़ाइल तालिका में स्थान अपडेट करना बहुत तेज होता है, तो फ़ाइल में जब मैं प्रगति पट्टी को अद्यतन करता हूं, तो प्रत्येक फ़ाइल के लिए मेव फ़ंक्शन पूरा होता है, मैं बैच चल रहा हूं।
.NET 4 (सी #) का उपयोग करना, क्या अन्य माध्यमों के माध्यम से पता लगाना संभव है कि फ़ाइल को कॉल करना है या नहीं। किसी भी 'कॉपी -> डिलीट' ऑपरेशन की आवश्यकता होगी या फ़ाइल तालिका को अपडेट नहीं करेगा और फ़ाइल डेटा कॉपी नहीं करेगा ?
संपादित करें:
मैं नीचे टिप्पणी में नोट के रूप में, मैं कैसे सोचा कि यह किया जा सकता है पता लगाने के लिए हो सकता है अगर किसी दिए गए स्रोत फ़ाइल स्थान और गंतव्य फ़ाइल स्थान एक ही भौतिक पर स्थित हैं पर संभावनाओं डिस्क & विभाजन, और यदि ऐसा है, तो इसका मतलब यह होगा कि मैं सटीक रूप से व्यवहार की उम्मीद कर सकता हूं और यह तय कर सकता हूं कि कौन से फ़ंक्शंस कॉल करना है - फ़ाइल में बनाया गया है। 'तत्काल तत्काल' अद्यतन फ़ाइल सिस्टम तालिका के लिए मेव फ़ंक्शन जो मुझे लगता है कि उसी डिस्क पर जाने पर मुझे लगता है/भाग, या मेरी अधिक विस्तृत 'रिपोर्ट प्रगति हर' एक्स 'बाइट कॉपी' कस्टम फ़ाइल कॉपी कोड। फाइल ट्रांसफर की गति उन मशीनों पर काफी भिन्न हो सकती है जो मेरे कार्यक्रम चलेंगे, इसलिए जब भी संभव हो, मैं विस्तृत प्रगति/वर्तमान स्थानांतरण गति की रिपोर्ट करने में सक्षम होना चाहता हूं।
नोट - प्रोग्राम नेटवर्क यूएनसी पथ का उपयोग कर सकता है जो एक ही रूट पथ के साथ विभिन्न भौतिक डिस्क का उपयोग कर सकता है यानी: \\ somename \ share \ workfolder \ project एक अलग भौतिक डिस्क पर हो सकता है \\ somename \ शेयर \ workfoldder \ otherproject। तो मुझे एक ही डिस्क/विभाजन पर एक स्रोत और गंतव्य फ़ोल्डर देखने के लिए विभाजन आईडी या भौतिक डिस्क आईडी का पता लगाने के लिए एक विधि की आवश्यकता होगी।
धन्यवाद
आपके पास यह पूछने का एक कारण है, मैं देखता हूं, लेकिन मुझे कोई तरीका नहीं है कि फाइल सिस्टम आपको इस प्रक्रिया पर किए गए अंतिम निर्णय के बारे में सूचित करने जा रहा है। यदि आप शैलफाइल कॉपी ऐपिस विंडोज का उपयोग कर सकते हैं तो प्रतिलिपि या चाल के दौरान दिखाए गए छोटे अच्छे संवाद में आपके लिए प्रगति पट्टी पहले से ही संभालती है। –
मैं सोच रहा था कि यह पता लगाने का कोई तरीका हो सकता है कि किसी दिए गए स्रोत फ़ाइल स्थान और गंतव्य फ़ाइल स्थान एक ही भौतिक डिस्क और विभाजन पर स्थित हैं, और यदि ऐसा है, तो इसका मतलब यह होगा कि मैं व्यवहार की सटीकता से अनुमान लगा सकता हूं। एमएसडीएन पर यह कैसे आसानी से नहीं मिल सका। इसके अतिरिक्त, मैं उम्मीद कर रहा था कि लोग मुझे सावधानी बरतें कि अगर मेरी टिप्पणी में दृष्टिकोण सभी फाइल सिस्टम के लिए काम नहीं कर सकता है, तो मैं तदनुसार कोड कर सकता हूं। ShellFileCopy API का उपयोग करने के बारे में आपके सुझाव के लिए धन्यवाद।मैं इसे देख लूंगा लेकिन यदि संभव हो तो मैं अपनी पुस्तकालय का उपयोग करूंगा। – JHubbard80
ठीक है, इसका जवाब पाने का यह एक आसान तरीका है, सिर्फ तकनीकी प्रमाण नहीं। स्पीड। जब एक फ़ाइल की प्रतिलिपि बनाई जाती है, तो सभी बाइट्स को वास्तव में एक फ़ाइल ले जाने के दौरान लिखा जाना चाहिए, बस फ़ाइल के शीर्षलेखों को फिर से लिखना होगा। इसके लिए 1 जीबी फ़ाइल को 5 गुना करने की कोशिश करने के लिए, और अगर यह तुरंत किया जाता है, तो यह चल रहा है, अगर उम्र लगती है, तो यह कॉपी -> हटाएं। निजी तौर पर, मुझे लगता है कि 'System.IO.File.Move()' फ़ाइल को ले जाता है, क्योंकि यह बेवकूफ होगा अगर वे प्रतिलिपि करेंगे -> प्रदर्शन के लिए हटाएं। – Aidiakapi