2012-10-01 45 views
12

我试图将目录从一个位置移动到同一驱动器上的另一个位置。我得到“该文件已存在时无法创建文件”错误。以下是我的代码。当使用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); 
     } 
+0

如果文件存在于目标中,您会希望得到什么?或合并 –

+1

我没有任何文件夹或文件在destinatin,我只是想将我的源文件夹移动到目标文件夹 – user1428019

回答

15

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

事情是这样的:

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

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

“:\ MYDIR到c:此方法如果,例如,您尝试移动ç抛出IOException \公共和c:\公众已经存在,你必须指定” c:\ public \ mydir“作为destDirName参数,前提是”mydir“不存在于”c:\ public“下,或者指定一个新的目录名称,例如”c:\ newdir“。

+0

我已经尝试通过给出目标为F:\目标\源,但同样的错误越来越。 – user1428019

4

你并不需要先创建目录,它会抛出IO异常,如果目标目录存在,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

+0

如果目标目录存在,则此代码不会将源目录的文件移动到目标目录。 – BornToCode

2

MSDN

此方法抛出IOException如果,例如,您尝试移动 C:\ MYDIR到c:\公众和c:\公众已经存在。

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

所以,你需要从

​​

改变你的方法

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

您只需拨打

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

什么它在内部所做的就是创建如果目标目录它不存在,然后遍历源目录的文件并将它们移动到目标目录。这样就不会发生“当文件已经存在时无法创建文件”的问题。

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

相关问题