How to create a recursive function to copy all files and folders

后端 未结 4 1210
日久生厌
日久生厌 2020-12-11 04:19

I am trying to create a function that will recursively copy a source folder and all files and folders inside of it to a different location.

At the moment, I have to

相关标签:
4条回答
  • 2020-12-11 04:53

    take a look at my question:

    performance of copying directories i used parallel foreach and it is very fast

    private static void CopyAll(string SourcePath, string DestinationPath)
    {
    
    string[] directories = System.IO.Directory.GetDirectories(SourcePath, "*.*", SearchOption.AllDirectories);
    
    Parallel.ForEach(directories, dirPath =>
    {
        Directory.CreateDirectory(dirPath.Replace(SourcePath, DestinationPath));
    }); 
    
    string[] files = System.IO.Directory.GetFiles(SourcePath, "*.*", SearchOption.AllDirectories);
    
    Parallel.ForEach(files, newPath =>
    {
        File.Copy(newPath, newPath.Replace(SourcePath, DestinationPath));
    }); 
    }
    
    0 讨论(0)
  • 2020-12-11 04:54

    Source: C# - Copy files and folders recursively from source to destination folder in c-sharp

    public static void CopyFolder(string sourceFolder, string destFolder)  
    {  
        if (!Directory.Exists(destFolder))  
            Directory.CreateDirectory(destFolder); 
    
        string[] files = Directory.GetFiles(sourceFolder);  
        foreach (string file in files)  
        {  
            string name = Path.GetFileName(file);  
            string dest = Path.Combine(destFolder, name);  
            File.Copy(file, dest);  
        }  
        string[] folders = Directory.GetDirectories(sourceFolder);  
        foreach (string folder in folders)  
        {  
            string name = Path.GetFileName(folder);  
            string dest = Path.Combine(destFolder, name);  
            CopyFolder(folder, dest);  
        }  
    }
    
    0 讨论(0)
  • 2020-12-11 04:57

    Using GetDirectories/GetFiles is somewhat out of date in my eyes, I would use Directory.EnumerateFileSystemEntries(source); instead as it is faster.

    0 讨论(0)
  • 2020-12-11 05:14

    Do it this way

     void Copy(string sourceDir, string targetDir)
     {
       Directory.CreateDirectory(targetDir);
       foreach (var file in Directory.GetFiles(sourceDir))
           File.Copy(file, Path.Combine(targetDir, Path.GetFileName(file)));
    
       foreach (var directory in Directory.GetDirectories(sourceDir))
           Copy(directory, Path.Combine(targetDir, Path.GetFileName(directory)));
     }
    
    0 讨论(0)
提交回复
热议问题