使用System.IO在C#中复制文件夹

我需要将文件夹C:\ FromFolder复制到C:\ ToFolder

下面的代码将切断我的FromFolder,然后将创建我的ToFolder。 所以我的FromFolder将会消失,所有项目都将在新创建的名为ToFolder的文件夹中

System.IO.Directory.Move(@"C:\FromFolder ", @"C:\ToFolder"); 

但我只想将FromFolder中的文件复制到ToFolder。 由于某种原因,没有System.IO.Directory.Copy ???

如何使用批处理文件完成此操作 – 非常简单

xcopy C:\ FromFolder C:\ ToFolder

问候艾蒂安

此链接提供了一个很好的示例。

http://msdn.microsoft.com/en-us/library/cc148994.aspx

这是一个片段

 // To copy all the files in one directory to another directory. // Get the files in the source folder. (To recursively iterate through // all subfolders under the current directory, see // "How to: Iterate Through a Directory Tree.") // Note: Check for target path was performed previously // in this code example. if (System.IO.Directory.Exists(sourcePath)) { string[] files = System.IO.Directory.GetFiles(sourcePath); // Copy the files and overwrite destination files if they already exist. foreach (string s in files) { // Use static Path methods to extract only the file name from the path. fileName = System.IO.Path.GetFileName(s); destFile = System.IO.Path.Combine(targetPath, fileName); System.IO.File.Copy(s, destFile, true); } } 

有一个文件副本。 重新创建文件夹并将原始目录中的所有文件复制到新的示例中

 static void Main(string[] args) { DirectoryInfo sourceDir = new DirectoryInfo("c:\\a"); DirectoryInfo destinationDir = new DirectoryInfo("c:\\b"); CopyDirectory(sourceDir, destinationDir); } static void CopyDirectory(DirectoryInfo source, DirectoryInfo destination) { if (!destination.Exists) { destination.Create(); } // Copy all files. FileInfo[] files = source.GetFiles(); foreach (FileInfo file in files) { file.CopyTo(Path.Combine(destination.FullName, file.Name)); } // Process subdirectories. DirectoryInfo[] dirs = source.GetDirectories(); foreach (DirectoryInfo dir in dirs) { // Get destination directory. string destinationDir = Path.Combine(destination.FullName, dir.Name); // Call CopyDirectory() recursively. CopyDirectory(dir, new DirectoryInfo(destinationDir)); } } 

复制目录(正确)实际上是一项相当复杂的任务,尤其是考虑到交汇点和硬链接等高级文件系统技术。 您最好的选择是使用支持它的API。 如果你不怕一点P / Invoke,shell32中的SHFileOperation是你最好的选择。 另一种方法是在Microsoft.VisualBasic程序集中使用Microsoft.VisualBasic.FileIO.FileSystem.CopyDirectory方法(即使您不使用VB)。

是的,你是对的。

http://msdn.microsoft.com/en-us/library/system.io.directoryinfo.aspx

提供了复制function..或者您可以使用其他function

http://msdn.microsoft.com/en-us/library/ms127960.aspx

您需要从头开始创建一个新目录,然后遍历源目录中的所有文件并将其复制。

 string[] files = Directory.GetFiles(GlobalVariables.mstrReadsWellinPath); foreach(string s in files) { fileName=Path.GetFileName(s); destFile = Path.Combine(DestinationPath, fileName); File.Copy(s, destFile); } 

我离开创建目的地目录给你:-)

你是对的。 没有Directory.Copy方法。 对于毫无戒心的开发人员来说,这将是一个非常强大的方法,但也是一个危险的方法。 复制文件夹可能是一个非常耗时的操作,而移动一个(在同一个驱动器上)则不是。

我想微软认为它会逐个复制文件,因此你可以显示某种进度信息。 您可以通过创建DirectoryInfo实例然后调用GetFiles()来遍历目录中的文件。 要包含子目录,您还可以调用GetDirectories()并使用递归方法枚举这些子目录。

一个简单的函数,它将源文件夹的全部内容复制到目标文件夹,并创建目标文件夹(如果它不存在)

 class Utils { internal static void copy_dir(string source, string dest) { if (String.IsNullOrEmpty(source) || String.IsNullOrEmpty(dest)) return; Directory.CreateDirectory(dest); foreach (string fn in Directory.GetFiles(source)) { File.Copy(fn, Path.Combine(dest, Path.GetFileName(fn)), true); } foreach (string dir_fn in Directory.GetDirectories(source)) { copy_dir(dir_fn, Path.Combine(dest, Path.GetFileName(dir_fn))); } } } 

本文提供了一个alogirthm来递归复制一些文件夹及其所有内容

来自文章:

遗憾的是,System.IO中没有内置函数可以复制文件夹及其内容。 以下是一个简单的递归算法,可以复制文件夹,子文件夹和文件,并在需要时创建目标文件夹。 为简单起见,没有error handling; 如果出现任何问题,将抛出exception,例如null或无效路径或目标文件已存在。

祝好运!

我的DirectoryInfo.CopyTo版本使用扩展名。

 public static class DirectoryInfoEx { public static void CopyTo(this DirectoryInfo source, DirectoryInfo target) { if (source.FullName.ToLower() == target.FullName.ToLower()) return; if (!target.Exists) target.Create(); foreach (FileInfo f in source.GetFiles()) { FileInfo newFile = new FileInfo(Path.Combine(target.FullName, f.Name)); f.CopyTo(newFile.FullName, true); } foreach (DirectoryInfo diSourceSubDir in source.GetDirectories()) { DirectoryInfo nextTargetSubDir = target.CreateSubdirectory(diSourceSubDir.Name); diSourceSubDir.CopyTo(nextTargetSubDir); } } } 

并使用那样……

 DirectoryInfo d = new DirectoryInfo("C:\Docs"); d.CopyTo(new DirectoryInfo("C:\New")); 

此代码使用户能够将一个目录的内容复制到另一个目录。

 using System; using System.IO; // ... static void Main(string[] args) { Console.ForegroundColor = ConsoleColor.Cyan; Console.Write("Copying... "); DirectoryCopy(@"D:\Projects\Lloyds", @"C:\Lloyds"); Console.WriteLine("Completed"); Console.ForegroundColor = ConsoleColor.Gray; Console.Write("Press any key to quit . . . "); Console.ReadKey(true); } static void DirectoryCopy(string source, string destination) { Directory.CreateDirectory(destination); DirectoryInfo sourceDirectory = new DirectoryInfo(source); foreach (FileInfo file in sourceDirectory.GetFiles()) File.Copy(file.FullName, Path.Combine(destination, file.Name)); foreach (DirectoryInfo directory in sourceDirectory.GetDirectories()) DirectoryCopy(directory.FullName, Path.Combine(destination, directory.Name)); }