使用Directory.Move时,该文件已存在时无法创建文件

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

任何人都可以建议吗?

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); } 

正如前面的两个答案所指出的那样,目标目录不能存在。 在您的代码中,如果目录不存在,则创建目录,然后尝试移动目录,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(); } } 

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

 string sourcedirectory = @"F:\source"; string destinationdirectory = @"F:\destination"; if (Directory.Exists(sourcedirectory)) { if (!Directory.Exists(destinationdirectory)) { Directory.Move(sourcedirectory, destinationdirectory); } } 

更多信息Directory.Move

http://msdn.microsoft.com/en-us/library/system.io.directory.move.aspx

来自http://msdn.microsoft.com/en-us/library/system.io.directory.move.aspx

“例如,如果您尝试将c:\ mydir移动到c:\ public,并且c:\ public已经存在,则此方法会抛出IOException。您必须将”c:\ public \ mydir“指定为destDirName参数,并提供“m:\ public”下不存在“mydir”,或指定新目录名称,例如“c:\ newdir”。“

根据MSDN ,

例如,如果您尝试将c:\ mydir移动到c:\ public,并且c:\ public已存在,则此方法将抛出IOException。

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

所以,你需要改变你的方法

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

 if (Directory.Exists(destinationdirectory)) { //delete or rename } Directory.Move(sourcedirectory, destinationdirectory); 

你可以打电话

 Microsoft.VisualBasic.FileIO.FileSystem.MoveDirectory(source, destination, true); 

它内部的作用是创建目标目录(如果它不存在)然后迭代源目录的文件并将它们移动到目标目录。 这样就不会发生“当该文件已经存在时无法创建文件”的问题。

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