C# Best way to create folder-structures

Viewed 3365

I'd like to automatically generate diffrent folder structures (As a preperation for new Video/Film-Editing projects). It also allows to add special folders like After Effects and Photoshop to every folder-structure.

It should read the structure from a config file and then create the folders.

My current code looks like this:

 if(tbPath.Text == "_______________________________________________________"
            || tbConfigPath.Text == "_______________________________________________________"
            || tbPath.Text == ""
            || tbConfigPath.Text == "")
        {
            System.Windows.MessageBox.Show("You didn't enter a valid Path.", "Invalid Path", MessageBoxButton.OK, MessageBoxImage.Error);
            return;
        }



        //List for the paths
        List<string> paths = new List<string>();
        List<string> finalpaths = new List<string>();
        string outPath = tbPath.Text;

        //Where to get the config from
        string configPath = tbConfigPath.Text;


        string line = "";
        // Read the file and display it line by line.  
        System.IO.StreamReader file = new System.IO.StreamReader(configPath);
        while ((line = file.ReadLine()) != null)
        {
            paths.Add(line);
        }

        file.Close();

        for (int i = 0; i < paths.Count(); i++)
        {
            finalpaths.Add(outPath + paths[i]);
        }

        //----------------Folder Generatring------------
        for (int i = 0; i < paths.Count(); i++)
        {
            Directory.CreateDirectory(finalpaths[i]);
        }


        // Add After Effects
        if (cbAE.IsChecked == true)
            {
            string AEpath = outPath + "\\AfterEffects";
            Directory.CreateDirectory(AEpath);
        }

        // Add Photoshop
        if (cbAE.IsChecked == true)
        {
            string PSpath = outPath + "\\Photoshop";
            Directory.CreateDirectory(PSpath);
        }


        System.Windows.MessageBox.Show("The folders where generated successfully", "Success", MessageBoxButton.OK, MessageBoxImage.Information);

        pgStartUp pgStart = new pgStartUp();
        NavigationService.Navigate(pgStart);

But I feel like this isn't really efficient. Is there any better way?

2 Answers

When you use:

Directory.CreateDirectory(path);

This line creates all or missing directories in the path string you are passing as a parameter. So you don't need anything else.

All your logic should be focused on creating a correct path string, taking into account the root directory and things like that.

As coders we often think in code and try to solve everything with it. If the base structure is the same, create the folder structure once, zip it up, and then:

Directory.CreateDirectory(tbPath.Text);
ZipFile.ExtractToDirectory("yadayada.zip", tbPath.Text);

        // Add After Effects
        if (cbAE.IsChecked == true)
            {
            string AEpath = outPath + "\\AfterEffects";
            Directory.CreateDirectory(AEpath);
        }

        // Add Photoshop
        if (cbAE.IsChecked == true)
        {
            string PSpath = outPath + "\\Photoshop";
            Directory.CreateDirectory(PSpath);
        }
Related