带有 System.IO 的子目录的 ASP.NET C# 复制目录

ASP.NET C# Copy Directory with SubDirectories with System.IO(带有 System.IO 的子目录的 ASP.NET C# 复制目录)

本文介绍了带有 System.IO 的子目录的 ASP.NET C# 复制目录的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要将整个目录 C:X 复制到 C:YX,并且我还需要复制子文件夹.
有没有办法使用 System.IO.FileDirectory 命名空间来做到这一点?
感谢所有帮助者!

I need to copy a whole directory C:X to C:YX, and I need the sub-folders to be copied as well.
Is there any way to do it with the System.IO.FileDirectory 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;
        }
    }
}

这篇关于带有 System.IO 的子目录的 ASP.NET C# 复制目录的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本文标题为:带有 System.IO 的子目录的 ASP.NET C# 复制目录

基础教程推荐