C# 使用Directory.Move时,如果文件已存在,则无法创建该文件

C# 使用Directory.Move时,如果文件已存在,则无法创建该文件,c#,C#,我正在尝试将目录从同一驱动器上的一个位置移动到另一个位置。我收到“无法在文件已存在时创建该文件”错误。下面是我的代码 有人能提出这个建议吗 string sourcedirectory = @"F:\source"; string destinationdirectory = @"F:\destination"; try { if (Directory.Exists(sourcedirectory))

我正在尝试将目录从同一驱动器上的一个位置移动到另一个位置。我收到“无法在文件已存在时创建该文件”错误。下面是我的代码

有人能提出这个建议吗

        string sourcedirectory = @"F:\source";
        string destinationdirectory = @"F:\destination";

        try
        {
            if (Directory.Exists(sourcedirectory))
            {
                if (Directory.Exists(destinationdirectory))
                {
                  Directory.Move(sourcedirectory, destinationdirectory);
                }
                else
                {
                  Directory.CreateDirectory(destinationdirectory);
                  Directory.Move(sourcedirectory, destinationdirectory);
                }
            }

        }
        catch (Exception ex)
        {
            log(ex.message);
        }


例如,如果您试图将c:\mydir移动到c:\public,并且c:\public已经存在,则此方法引发IOException。您必须指定“c:\public\mydir”作为destDirName参数,前提是“c:\public”下不存在“mydir”,或者指定一个新的目录名,例如“c:\newdir”。

正如前面两个答案所指出的那样,目标目录不能存在。在代码中,如果目录不存在,则创建目录,然后尝试移动目录,move方法将为您创建目录。如果该目录已存在,则需要将其删除或移动

大概是这样的:

class Program
{
    static void Main(string[] args)
    {
        string sourcedirectory = @"C:\source";
        string destinationdirectory = @"C:\destination";
        string backupdirectory = @"C:\Backup";
        try
        {
            if (Directory.Exists(sourcedirectory))
            {
                if (Directory.Exists(destinationdirectory))
                {
                    //Directory.Delete(destinationdirectory);
                    Directory.Move(destinationdirectory, backupdirectory + DateTime.Now.ToString("_MMMdd_yyyy_HHmmss"));
                    Directory.Move(sourcedirectory, destinationdirectory);
                }
                else
                {
                    Directory.Move(sourcedirectory, destinationdirectory);
                }
            }

        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
        Console.ReadLine();
    }
}

您不需要先创建目录,它会抛出IO异常,如果目标目录存在,
Move
方法会自动为您创建它:

string sourcedirectory = @"F:\source";
string destinationdirectory = @"F:\destination";

if (Directory.Exists(sourcedirectory))
{
    if (!Directory.Exists(destinationdirectory))
    {
         Directory.Move(sourcedirectory, destinationdirectory);
    }
}
有关
目录的更多信息。移动

根据

例如,如果您尝试移动,此方法将引发IOException c:\mydir到c:\public和c:\public已经存在

但是,在您的方法中,您正在移动之前创建目标目录

因此,您需要将您的方法从

if (Directory.Exists(destinationdirectory))
{
  Directory.Move(sourcedirectory, destinationdirectory);
}
else
{
  Directory.CreateDirectory(destinationdirectory);
  Directory.Move(sourcedirectory, destinationdirectory);
}

你可以打个电话

Microsoft.VisualBasic.FileIO.FileSystem.MoveDirectory(source, destination, true);
它在内部所做的是,如果目标目录不存在,则创建目标目录,然后迭代源目录的文件并将其移动到目标目录。这样就不会出现“当文件已经存在时无法创建文件”的问题


您需要添加
Microsoft.VisualBasic
作为参考。

我尝试将目标设置为F:\destination\source,但出现了相同的错误。如果目标中存在文件,您希望如何覆盖?如果目标目录存在,此代码不会将源目录的文件移动到目标目录。
Microsoft.VisualBasic.FileIO.FileSystem.MoveDirectory(source, destination, true);