Search code examples
c#.net-3.5directorycopying

Copying Directories in a non-static environment?


Can some one give me a hint/example of copying a directory in a non-static environment? I tried to look it up but no such luck.

    private void copybutton_Click(object sender, EventArgs e)
    {
        string selectedPath = comboBox1.SelectedItem.ToString();
        copydirectories(@"C:\Mavro\MavBridge\" + selectedPath, @"C:\Mavro\MavBridge\" + selectedPath + " - Copy");
    }

    public void copydirectories()
    {
        try
        {
            string selectedPath = comboBox1.SelectedItem.ToString();
            DirectoryInfo source = new DirectoryInfo(@"C:\Mavro\MavBridge\" + selectedPath);
            DirectoryInfo target = new DirectoryInfo(@"C:\Mavro\MavBridge\" + selectedPath);

            if (!source.Exists)
                return;
            if (!target.Exists)
                target.Create();

            DirectoryInfo[] sourceDirectories = source.GetDirectories();    
            for(int j = 0; j < sourceDirectories.Length; ++j)
            {
                copydirectories(sourceDirectories[j].FullName,target.FullName +"\\" + sourceDirectories[j].Name);
            }
            datemodified.Refresh();

   }

That got to takes 2 arguments error


Solution

  • Using the code at http://xneuron.wordpress.com/2007/04/12/copy-directory-and-its-content-to-another-directory-in-c/

    public static void CopyAll(DirectoryInfo source, DirectoryInfo target) {
        // Check if the target directory exists, if not, create it.
        if (!Directory.Exists(target.FullName)) {
            Directory.CreateDirectory(target.FullName);
        }
    
        // Copy each file into its new directory.
        foreach (FileInfo fi in source.GetFiles()) {
            Console.WriteLine(@”Copying {0}\{1}”, target.FullName, fi.Name);
            fi.CopyTo(Path.Combine(target.ToString(), fi.Name), true);
        }
    
        // Copy each subdirectory using recursion.
        foreach (DirectoryInfo diSourceSubDir in source.GetDirectories()) {
            DirectoryInfo nextTargetSubDir = 
                target.CreateSubdirectory(diSourceSubDir.Name);
            CopyAll(diSourceSubDir, nextTargetSubDir);
        }
    }
    

    makes it easy, just call it with

    CopyAll(new DirectoryInfo(@"C:\Mavro\MavBridge\" + selectedPath),
            new DirectoryInfo(@"C:\Mavro\MavBridge\" + selectedPath + " - Copy"));