2010-06-01 46 views
6

如何将目录复制到C#中的其他驱动器?将目录复制到其他驱动器

+2

笑,什么?对不起,没有取笑任何人只是认为这个问题是这样的问题很热闹:) – VoodooChild 2010-06-01 04:43:00

+0

我明白这个问题已经回答,但你应该尝试和提高质量的问题。它写得不是很好。 – 2010-06-01 04:46:17

+3

我想我们需要一个新的理由来关闭 - '很容易找到如果OP做出努力' – Gishu 2010-06-01 04:59:14

回答

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

下面一个还不错:

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

您可以使用此功能也:

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

FileSystem.CopyDirectory是在VB命名空间和程序集中,但可能并不重要。

+0

这不会跨卷不起作用 – Crash893 2012-11-17 02:41:32

+0

@ Crash893是的。 – 2017-07-15 02:11:27

+0

@KyleDelaney是的,它现在(自我发布以来已经有7年了) – Crash893 2017-08-02 13:38:39

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 2014-02-08 00:27:12

2

这里,将工作在.NET 4.0 +

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

包括扩展此文件在您的项目中

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); 
} 
相关问题