C#目录复制:基础与高级功能实现,提高性能与灵活性

作者:微信公众号:【架构师老卢】
12-25 18:39
47

概述:在C#中,实现复制目录的基础功能涉及使用Directory和File类,而高级功能使用了更灵活的DirectoryInfo和FileInfo类,提高性能和扩展性。

基础功能实现:

以下是基础功能实现,用于在C#中复制目录的全部内容到另一个目录。

using System;
using System.IO;

class Program
{
    static void Main()
    {
        string sourceDirectory = @"C:\SourceDirectory";
        string destinationDirectory = @"C:\DestinationDirectory";

        CopyDirectory(sourceDirectory, destinationDirectory);

        Console.WriteLine("基础功能:目录复制完成。");
    }

    static void CopyDirectory(string sourceDir, string destDir)
    {
        // 检查源目录是否存在
        if (!Directory.Exists(sourceDir))
        {
            Console.WriteLine("源目录不存在。");
            return;
        }

        // 如果目标目录不存在,则创建
        if (!Directory.Exists(destDir))
        {
            Directory.CreateDirectory(destDir);
        }

        // 获取源目录中的所有文件和子目录
        string[] files = Directory.GetFiles(sourceDir);
        string[] subdirectories = Directory.GetDirectories(sourceDir);

        // 复制文件
        foreach (string file in files)
        {
            string destFile = Path.Combine(destDir, Path.GetFileName(file));
            File.Copy(file, destFile);
        }

        // 递归复制子目录
        foreach (string subdirectory in subdirectories)
        {
            string destSubdirectory = Path.Combine(destDir, Path.GetFileName(subdirectory));
            CopyDirectory(subdirectory, destSubdirectory);
        }
    }
}

高级功能实现:

以下是高级功能实现,使用DirectoryInfoFileInfo类提高性能和灵活性。

using System;
using System.IO;

class Program
{
    static void Main()
    {
        string sourceDirectory = @"C:\SourceDirectory";
        string destinationDirectory = @"C:\DestinationDirectory";

        CopyDirectoryAdvanced(sourceDirectory, destinationDirectory);

        Console.WriteLine("高级功能:目录复制完成。");
    }

    static void CopyDirectoryAdvanced(string sourceDir, string destDir)
    {
        DirectoryInfo sourceDirectory = new DirectoryInfo(sourceDir);

        // 检查源目录是否存在
        if (!sourceDirectory.Exists)
        {
            Console.WriteLine("源目录不存在。");
            return;
        }

        // 如果目标目录不存在,则创建
        if (!Directory.Exists(destDir))
        {
            Directory.CreateDirectory(destDir);
        }

        // 获取源目录中的所有文件和子目录
        FileInfo[] files = sourceDirectory.GetFiles();
        DirectoryInfo[] subdirectories = sourceDirectory.GetDirectories();

        // 复制文件
        foreach (FileInfo file in files)
        {
            string destFile = Path.Combine(destDir, file.Name);
            file.CopyTo(destFile, true);
        }

        // 递归复制子目录
        foreach (DirectoryInfo subdirectory in subdirectories)
        {
            string destSubdirectory = Path.Combine(destDir, subdirectory.Name);
            CopyDirectoryAdvanced(subdirectory.FullName, destSubdirectory);
        }
    }
}

基础功能实现原理:

  1. 检查源目录是否存在,不存在则退出。
  2. 如果目标目录不存在,创建目标目录。
  3. 获取源目录中的所有文件和子目录。
  4. 遍历文件,将每个文件复制到目标目录。
  5. 递归调用自身,复制每个子目录及其内容。

高级功能实现原理:

  1. 使用DirectoryInfo代替Directory,提供更多操作。
  2. 使用FileInfo代替File,提供更多文件操作。
  3. 递归时直接使用DirectoryInfo.GetDirectoriesDirectoryInfo.GetFiles,避免多次调用Directory.GetDirectoriesDirectory.GetFiles
  4. 添加了CopyTo方法,提高性能。

高级功能的实现使用了更多的对象封装,提高了性能和灵活性。

阅读排行