2010-06-01 9 views
6

मैं निर्देशिका में सी # में एक अलग ड्राइव में कैसे कॉपी करूं?एक निर्देशिका को एक अलग ड्राइव पर कॉपी करें

+2

lol, क्या? खेद है कि किसी के मजाक उड़ाए सिर्फ सोचा कि यह सवाल उल्लसित तरीके से उल्लसित है :) – VoodooChild

+0

मैं समझता हूं कि प्रश्न का उत्तर दिया गया है, लेकिन आपको प्रश्न की गुणवत्ता को आजमाकर सुधारना चाहिए। यह बहुत अच्छी तरह लिखा नहीं है। –

+3

मुझे लगता है कि हमें बंद करने के लिए एक नए कारण की आवश्यकता है - 'ओपी ने प्रयास किया है तो आसान है' – Gishu

उत्तर

16

आप प्रदर्शन करने के लिए इस कोड का उपयोग कर सकते हैं आपका ऑपरेशन:

public static void CopyAll(DirectoryInfo source, DirectoryInfo target) 
{ 
    // Check if the target directory exists, if not, create it. 
    if (Directory.Exists(target.FullName) == false) 
    { 
     Directory.CreateDirectory(target.FullName); 
    } 

    // Copy each file into it’s new directory. 
    foreach (FileInfo fi in source.GetFiles()) 
    { 
     Console.WriteLine(@”Copying {0}\{1}”, target.FullName, fi.Name); 
     fi.CopyTo(Path.Combine(target.ToString(), fi.Name), true); 
    } 

    // Copy each subdirectory using recursion. 
    foreach (DirectoryInfo diSourceSubDir in source.GetDirectories()) 
    { 
     DirectoryInfo nextTargetSubDir = 
      target.CreateSubdirectory(diSourceSubDir.Name); 
     CopyAll(diSourceSubDir, nextTargetSubDir); 
    } 
} 
FileSystem.CopyDirectory(sourceDir, destDir); 
5
FileSystem.CopyDirectory(sourceDir, destDir); 

FileSystem.CopyDirectory एक वीबी नाम स्थान और विधानसभा में है, लेकिन यह शायद कोई फर्क नहीं पड़ता।

+0

यह दुर्भाग्य से वॉल्यूम पर काम नहीं करता – Crash893

+0

@ Crash893 हां यह करता है। –

+0

@KyleDelaney हाँ यह अब करता है (यह पोस्ट करने के 7 साल बाद) – Crash893

2

कैसे करें: कॉपी, हटाएँ, और फ़ाइलें और फ़ोल्डर (सी # प्रोग्रामिंग गाइड)
http://msdn.microsoft.com/en-us/library/cc148994.aspx

सी # कॉपी फ़ोल्डर स्थानांतरित रिकर्सिवली
http://www.csharp411.com/c-copy-folder-recursively/

+0

यह दिखाता है कि एक पुनरावर्ती प्रति कैसे करें। –

+0

@ मैथ्यू: फिक्स्ड। –

0
private String path; 
    public int copyAllContents(String destinationFolder, ProgressBar progressBar) 
    { 
     int countCopyFiles = 0; 
     if (!Directory.Exists(destinationFolder)) 
     { Directory.CreateDirectory(destinationFolder); } 
     String[] allFilesForCurrentFolder = Directory.GetFiles(path, "*.*", SearchOption.TopDirectoryOnly); 
     String[] subFoldersAllpath = Directory.GetDirectories(path); 
     for (int i = 0; i < allFilesForCurrentFolder.Length; i++) 
     { 
      try { File.Copy(allFilesForCurrentFolder[i], destinationFolder + "\\" + Path.GetFileName(allFilesForCurrentFolder[i])); countCopyFiles++; progressBar.Value++; } 
      catch (Exception ex) { Console.WriteLine(ex.Message.ToString()); } 
     } 
     if (subFoldersAllpath.Length == 0) 
     { return allFilesForCurrentFolder.Length; }; 
     for (int i = 0; i < subFoldersAllpath.Length; i++) 
     { 
      this.path = subFoldersAllpath[i]; 
      String[] subFoldersAllpathLastFolder = subFoldersAllpath[i].Split('\\'); 
      countCopyFiles += this.copyAllContents(destinationFolder + "\\" + subFoldersAllpathLastFolder[subFoldersAllpathLastFolder.Length - 1], progressBar); 
     } 
     return countCopyFiles; 
    } 
+0

यदि आप अपना कोड सही तरीके से प्रारूपित करते हैं तो दूसरों के लिए यह आपके उत्तर को पढ़ने के लिए बहुत आसान है। साथ ही, अपने कोड में कुछ संदर्भ जोड़ना सर्वोत्तम है। इस बारे में लिखें कि आपको क्यों लगता है कि यह एक अच्छा जवाब है या यह अन्य उत्तरों की तुलना में अलग-अलग करता है। – mdewitt

2

यहाँ एक विस्तार है कि में काम करेंगे नेट 4.0+

var source = new DirectoryInfo(@"C:\Test"); 
var destination = new DirectoryInfo(@"E:\Test"); 
source.CopyTo(destination); 

शामिल है:

static public void CopyFolder(string sourceFolder, string destFolder) 
    { 
     if (!Directory.Exists(destFolder)) 
      Directory.CreateDirectory(destFolder); 
     string[] files = Directory.GetFiles(sourceFolder); 
     foreach (string file in files) 
     { 
      string name = Path.GetFileName(file); 
      string dest = Path.Combine(destFolder, name); 
      File.Copy(file, dest); 
     } 
     string[] folders = Directory.GetDirectories(sourceFolder); 
     foreach (string folder in folders) 
     { 
      string name = Path.GetFileName(folder); 
      string dest = Path.Combine(destFolder, name); 
      CopyFolder(folder, dest); 
     } 
    } 

आप इस समारोह भी उपयोग कर सकते हैं:एक नीचे भी अच्छा है आपकी परियोजना में यह फ़ाइल

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.IO; 

namespace System.IO 
{ 
    public static class DirectoryInfoExtensions 
    { 
    public static void CopyTo(this DirectoryInfo source, DirectoryInfo target) 
    { 
     if (!target.Exists) 
     target.Create(); 

     foreach (var file in source.GetFiles()) 
     file.CopyTo(Path.Combine(target.FullName, file.Name), true); 

     foreach (var subdir in source.GetDirectories()) 
     subdir.CopyTo(target.CreateSubdirectory(subdir.Name)); 
    } 
    } 
} 
0

यहाँ एक दृष्टिकोण है कि प्रतियां एक async समारोह के रूप में एक निर्देशिका रिकर्सिवली:

public static async Task CopyDirectoryAsync(string sourceDirectory, string destinationDirectory) 
{ 
    if (!Directory.Exists(destinationDirectory)) 
     Directory.CreateDirectory(destinationDirectory); 

    foreach (var file in Directory.GetFiles(sourceDirectory)) 
    { 
     var name = Path.GetFileName(file); 
     var dest = Path.Combine(destinationDirectory, name); 
     await CopyFileAsync(file, dest); 
    } 

    foreach (var subdir in Directory.GetDirectories(sourceDirectory)) 
    { 
     var name = Path.GetFileName(subdir); 
     var dest = Path.Combine(destinationDirectory, name); 
     await CopyDirectoryAsync(subdir, dest); 
    } 
} 

public static async Task CopyFileAsync(string sourceFile, string destinationFile) 
{ 
    using (var sourceStream = new FileStream(sourceFile, FileMode.Open, FileAccess.Read, FileShare.Read, 4096, FileOptions.Asynchronous | FileOptions.SequentialScan)) 
    using (var destinationStream = new FileStream(destinationFile, FileMode.CreateNew, FileAccess.Write, FileShare.None, 4096, FileOptions.Asynchronous | FileOptions.SequentialScan)) 
     await sourceStream.CopyToAsync(destinationStream); 
} 
संबंधित मुद्दे