本文介绍了ASP.NET C#复制目录与SubDirectories与System.IO的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我需要将整个目录C:\X复制到C:\Y \X,我还需要复制子文件夹。 有任何方法使用System.IO.File \Directory命名空间吗? 感谢所有帮助者!
I need to copy a whole directory C:\X to C:\Y\X, and I need the sub-folders to be copied as well. Is there any way to do it with the System.IO.File\Directory namespaces ? Thanks for all helpers!
推荐答案此类将复制或移动文件夹,而不进行递归调用。 方法使用自己的堆栈处理递归,这是为了避免 StackOverflowException 。
This class will copy or move a folder, without recursive calls. The methods is using their own stacks to handle recursion, this is to avoid StackOverflowException.
public static class CopyFolder { public static void CopyDirectory(string source, string target) { var stack = new Stack<Folders>(); stack.Push(new Folders(source, target)); while (stack.Count > 0) { var folders = stack.Pop(); Directory.CreateDirectory(folders.Target); foreach (var file in Directory.GetFiles(folders.Source, "*.*")) { string targetFile = Path.Combine(folders.Target, Path.GetFileName(file)); if (File.Exists(targetFile)) File.Delete(targetFile); File.Copy(file, targetFile); } foreach (var folder in Directory.GetDirectories(folders.Source)) { stack.Push(new Folders(folder, Path.Combine(folders.Target, Path.GetFileName(folder)))); } } } public static void MoveDirectory(string source, string target) { var stack = new Stack<Folders>(); stack.Push(new Folders(source, target)); while (stack.Count > 0) { var folders = stack.Pop(); Directory.CreateDirectory(folders.Target); foreach (var file in Directory.GetFiles(folders.Source, "*.*")) { string targetFile = Path.Combine(folders.Target, Path.GetFileName(file)); if (File.Exists(targetFile)) File.Delete(targetFile); File.Move(file, targetFile); } foreach (var folder in Directory.GetDirectories(folders.Source)) { stack.Push(new Folders(folder, Path.Combine(folders.Target, Path.GetFileName(folder)))); } } Directory.Delete(source, true); } public class Folders { public string Source { get; private set; } public string Target { get; private set; } public Folders(string source, string target) { Source = source; Target = target; } } }更多推荐
ASP.NET C#复制目录与SubDirectories与System.IO
发布评论