开发者

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

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 D开发者_Python百科irectoryInfo(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!!!


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
        }


Even though this works in the command line to move a file, when programming you need to provide the full new name.

So you'd need to change newLocation to "C:\Songs\Elvis\Elvis my Man" to make this work.


From MSDN,

This method throws an IOException if, for example, you try to move c:\mydir to c:\public, and c:\public already exists. You must specify "c:\public\mydir" as the destDirName parameter, or specify a new directory name such as "c:\newdir".

It looks like you need to set newLocation to C:\Songs\Elvis\Elvis my man


    private void moveDirectory(string fuente,string destino)
    {
        if (!System.IO.Directory.Exists(destino))
        {
            System.IO.Directory.CreateDirectory(destino);
        }
        String[] files = Directory.GetFiles(fuente);
        String[] directories = Directory.GetDirectories(fuente);
        foreach (string s in files)
        {
            System.IO.File.Copy(s, Path.Combine(destino,Path.GetFileName(s)), true);     
        }
        foreach(string d in directories)
        {

            moveDirectory(Path.Combine(fuente, Path.GetFileName(d)), Path.Combine(destino, Path.GetFileName(d)));
        }

    }
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜