2010-06-01 17 views
6

Wie kopiere ich ein Verzeichnis auf ein anderes Laufwerk in C#?Kopieren Sie ein Verzeichnis auf ein anderes Laufwerk

+2

lol, was? Tut mir leid, mich nicht über irgendjemanden lustig zu machen, dachte nur, dass diese Frage urkomisch ist, wie es gefragt wird :) – VoodooChild

+0

Ich verstehe, dass die Frage beantwortet wurde, aber Sie sollten versuchen, die Qualität der Frage zu verbessern. Es ist nicht sehr gut geschrieben. –

+3

Ich denke, wir brauchen einen neuen Grund zu schließen - "leicht zu finden, wenn das OP die Anstrengung macht" – Gishu

Antwort

16

können Sie diesen Code verwenden, um durchzuführen Ihre Operation:

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); 
    } 
} 

unten ist auch gut:

FileSystem.CopyDirectory(sourceDir, destDir); 
5
FileSystem.CopyDirectory(sourceDir, destDir); 

FileSystem.CopyDirectory ist in einer VB-Namespace und Montage, aber das ist wahrscheinlich keine Rolle spielt.

+0

dies funktioniert leider nicht über Volumes leider – Crash893

+0

@ Crash893 Ja, es tut. –

+0

@KyleDelaney Ja, es tut jetzt (es ist 7 Jahre her, seit ich das gepostet habe) – Crash893

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

Es ist viel einfacher für andere, Ihre Antwort zu lesen, wenn Sie Ihren Code richtig formatieren. Außerdem ist es am besten, Ihrem Code einen Kontext hinzuzufügen. Schreiben Sie darüber, warum Sie denken, dass dies eine gute Antwort ist oder was es anders macht als die anderen Antworten. – mdewitt

2

Hier ist eine Erweiterung, die .NET 4.0+

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

Fügen Sie arbeiten in:

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); 
     } 
    } 

Sie diese Funktion auch verwenden können, Diese Datei in Ihrem Projekt

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

Hier ist ein Ansatz, kopiert ein Verzeichnis rekursiv als async Funktion:

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); 
} 
Verwandte Themen