2011-08-23 10 views
10

क्या किसी को .Net लाइब्रेरी के बारे में पता है, जहां किसी फ़ाइल को प्रतिलिपि बनाई जा सकती है या चिपकाया जा सकता है या किसी भी टाइमस्टैम्प को बदले बिना स्थानांतरित किया जा सकता है। जिस कार्यक्षमता को मैं ढूंढ रहा हूं वह robocopy.exe नामक प्रोग्राम में निहित है, लेकिन मुझे यह बाइनरी साझा किए बिना इस कार्यक्षमता को चाहिए।टाइमस्टैम्प को संरक्षित करते समय फ़ाइल को स्थानांतरित/प्रतिलिपि बनाने के लिए नेट लाइब्रेरी

विचार?

उत्तर

15
public static void CopyFileExactly(string copyFromPath, string copyToPath) 
{ 
    var origin = new FileInfo(copyFromPath); 

    origin.CopyTo(copyToPath, true); 

    var destination = new FileInfo(copyToPath); 
    destination.CreationTime = origin.CreationTime; 
    destination.LastWriteTime = origin.LastWriteTime; 
    destination.LastAccessTime = origin.LastAccessTime; 
} 
+1

गंतव्य फ़ाइल पहले से मौजूद होने पर सही मान प्राप्त करने के लिए आपको 'गंतव्य' पर 'ताज़ा करें' (या बाद में इसे बनाने) को कॉल नहीं करना होगा? –

+0

@ पॉल रूएन: आप सही हैं - मैंने तदनुसार जवाब अपडेट किया है, धन्यवाद। –

2

आप को पढ़ने के लिए सक्षम होना चाहिए आपको आवश्यक मूल्य, जो भी परिवर्तन आप चाहते हैं और फिर पिछले मानों को पुनर्स्थापित करें FileInfo के गुणों का उपयोग करके।

11

जब क्रियान्वित प्रशासनिक विशेषाधिकार के बिना रॉय की जवाब जब मौजूदा केवल पढ़ने के लिए फ़ाइलों को अधिलेखित करने के लिए प्रयास कर रहा है या जब की नकल की केवल पढ़ने के लिए फ़ाइलों के टाइमस्टैम्प सेट करने का प्रयास एक अपवाद (UnauthorizedAccessException) फेंक देते हैं।

निम्नलिखित समाधान रॉय के उत्तर पर आधारित है, लेकिन इसे केवल पढ़ने के लिए फाइलों को ओवरराइट करने के लिए विस्तारित करता है और केवल फाइलों को पढ़ने के लिए टाइमस्टैम्प को बदलने के लिए फ़ाइल की केवल पढ़ने की विशेषता को संरक्षित करते समय सभी प्रशासक विशेषाधिकार के बिना निष्पादित करते हैं।

public static void CopyFileExactly(string copyFromPath, string copyToPath) 
{ 
    if (File.Exists(copyToPath)) 
    { 
     var target = new FileInfo(copyToPath); 
     if (target.IsReadOnly) 
      target.IsReadOnly = false; 
    } 

    var origin = new FileInfo(copyFromPath); 
    origin.CopyTo(copyToPath, true); 

    var destination = new FileInfo(copyToPath); 
    if (destination.IsReadOnly) 
    { 
     destination.IsReadOnly = false; 
     destination.CreationTime = origin.CreationTime; 
     destination.LastWriteTime = origin.LastWriteTime; 
     destination.LastAccessTime = origin.LastAccessTime; 
     destination.IsReadOnly = true; 
    } 
    else 
    { 
     destination.CreationTime = origin.CreationTime; 
     destination.LastWriteTime = origin.LastWriteTime; 
     destination.LastAccessTime = origin.LastAccessTime; 
    } 
} 
संबंधित मुद्दे

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