Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Moving a folder (Directory) from one location to another - misbehavior

Tags:

c#

directory

move

I want to move a directory from one location to another using C# .NET. I used Directory.Move or even DirectoryInfo (with MoveTo) this simple way:

// source is: "C:\Songs\Elvis my Man"
// newLocation is: "C:\Songs\Elvis"

try
{
    // Previous command was: Directory.Move(source, newLocation);
    DirectoryInfo dir = new DirectoryInfo(source);
    dir.MoveTo(newLocation);
}
catch (Exception e)
{
    Console.WriteLine("Error: "+ e.Message);
}

But action that's being done (for both cases) is renaming the folder name from 'source' to 'newLocation'

What I expected? that folder "Elvis my man" will be now in "Elvis" folder.

What has happened? "Elvis my man" was changed to "Elvis" (Renamed). If the directory "Elvis" is already exists, it can't change it to "Elvis" (cause he can't make a duplicate names), therefore I get an exception saying that.

What am I doing wrong??

Many thanks!!!

like image 803
Shahar Avatar asked Dec 09 '22 06:12

Shahar


1 Answers

I would advise putting validation around the Move command to ensure that the source location does exists and the destination location doesn't exists.

I've always found it easier to avoid the exceptions than handle them once they do occur.

You'll probably want to include exception handling as well, just in case the access permissions are a problem or a file is open and can't be moved...

Here's some sample code for you:

            string sourceDir = @"c:\test";
        string destinationDir = @"c:\test1";

        try
        {
            // Ensure the source directory exists
            if (Directory.Exists(sourceDir) == true )
            {
                // Ensure the destination directory doesn't already exist
                if (Directory.Exists(destinationDir) == false)
                {
                    // Perform the move
                    Directory.Move(sourceDir, destinationDir);
                }
                else
                {
                    // Could provide the user the option to delete the existing directory
                    // before moving the source directory
                }
            }
            else
            {
                // Do something about the source directory not existing
            }
        }
        catch (Exception)
        {
            // TODO: Handle the exception that has been thrown
        }
like image 81
TeamWild Avatar answered Dec 22 '22 01:12

TeamWild