在启动时将所有文件和子文件夹从目录A复制到Director B

问题描述 投票:0回答:3

我正在尝试在游戏启动时将整个目录(包括所有文件和子文件夹)从一个目标复制到另一个目标。我看过这里前面提到的脚本:https://answers.unity.com/questions/1157689/copy-an-entire-directory-to-another-folder-through.html

但是,这似乎并不复制子文件夹和子文件夹的内容-任何建议都将非常有帮助!

c# unity3d copy subdirectory
3个回答
0
投票

您需要使用递归。基本上,您有一种将文件夹和内容复制到某处的方法。如果该文件夹包含任何子文件夹,请为每个子文件夹运行相同的方法,然后将执行相同的操作。

示例:

static void CopyFolder(string path, string target)
{
    // Create target directory
    Directory.CreateDirectory(target);

    // Copy all files
    foreach (string file in Directory.GetFiles(path))
        File.Copy(file, Path.Combine(target, Path.GetFileName(file)));

    // Recursively copy all subdirectories
    foreach (string directory in Directory.GetDirectories(path))
        CopyFolder(directory, Path.Combine(target, Path.GetFileName(directory)));
}

0
投票

在该代码中,它仅遍历该文件夹中的所有文件。您可以对所有目录及其文件和目录遵循相同的概念。...(提示递归)。

这里是获取文件Directory.EnumerateFiles和目录Directory.EnumerateDirectories的方式。


0
投票

尝试一下

class Program
{
    static void Main(string[] args)
    {
        string sourceDirectory = @"C:\temp\source";
        string targetDirectory = @"C:\temp\destination";

        Copy(sourceDirectory, targetDirectory);

        Console.WriteLine("\r\nEnd of program");
        Console.ReadKey();
    }

    public static void Copy(string sourceDirectory, string targetDirectory)
    {
        var diSource = new DirectoryInfo(sourceDirectory);
        var diTarget = new DirectoryInfo(targetDirectory);

        CopyAll(diSource, diTarget);
    }

    public static void CopyAll(DirectoryInfo source, DirectoryInfo target)
    {
        Directory.CreateDirectory(target.FullName);

        // Copy each file into the new directory.
        foreach (FileInfo fi in source.GetFiles())
        {
            Console.WriteLine(@"Copying {0}\{1}", target.FullName, fi.Name);
            fi.CopyTo(Path.Combine(target.FullName, fi.Name), true);
        }

        // Copy each subdirectory using recursion.
        foreach (DirectoryInfo diSourceSubDir in source.GetDirectories())
        {
            DirectoryInfo nextTargetSubDir =
                target.CreateSubdirectory(diSourceSubDir.Name);
            CopyAll(diSourceSubDir, nextTargetSubDir);
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.