What is the best way to recursively copy contents in C#?

后端 未结 3 2047
北海茫月
北海茫月 2020-12-06 10:31

What is the best way to recursively copy a folder\'s content into another folder using C# and ASP.NET?

相关标签:
3条回答
  • 2020-12-06 11:01

    You can use SearchOption.AllDirectories to recursively search down folders, you just need to create the directories before you copy...

    // string source, destination; - folder paths 
    int pathLen = source.Length + 1;
    
    foreach (string dirPath in Directory.GetDirectories(source, "*", SearchOption.AllDirectories))
    {
        string subPath = dirPath.Substring(pathLen);
        string newpath = Path.Combine(destination, subPath);
        Directory.CreateDirectory(newpath );
    }
    
    foreach (string filePath in Directory.GetFiles(source, "*.*", SearchOption.AllDirectories))
    {
        string subPath = filePath.Substring(pathLen);
        string newpath = Path.Combine(destination, subPath);
        File.Copy(filePath, newpath);
    }
    
    0 讨论(0)
  • 2020-12-06 11:06

    Just use Microsoft.VisualBasic.FileIO.FileSystem.CopyDirectory in Microsoft.VisualBasic.dll assembly.

    Add a reference to Microsoft.VisualBasic

    Microsoft.VisualBasic.FileIO.FileSystem.CopyDirectory(source, destination);
    
    0 讨论(0)
  • 2020-12-06 11:22

    Well you can try this

    DirectoryInfo sourcedinfo = new DirectoryInfo(@"E:\source");
    DirectoryInfo destinfo = new DirectoryInfo(@"E:\destination");
    copy.CopyAll(sourcedinfo, destinfo);
    

    and this is the method that do all the work:

    public void CopyAll(DirectoryInfo source, DirectoryInfo target)
    {
        try
        {
            //check if the target directory exists
            if (Directory.Exists(target.FullName) == false)
            {
                Directory.CreateDirectory(target.FullName);
            }
    
            //copy all the files into the new directory
    
            foreach (FileInfo fi in source.GetFiles())
            {
                fi.CopyTo(Path.Combine(target.ToString(), fi.Name), true);
            }
    
    
            //copy all the sub directories using recursion
    
            foreach (DirectoryInfo diSourceDir in source.GetDirectories())
            {
                DirectoryInfo nextTargetDir = target.CreateSubdirectory(diSourceDir.Name);
                CopyAll(diSourceDir, nextTargetDir);
            }
            //success here
        }
        catch (IOException ie)
        {
            //handle it here
        }
    }
    

    I hope this will help :)

    0 讨论(0)
提交回复
热议问题