2012-10-01 40 views
12

Estoy intentando mover el directorio de una ubicación a otra en la misma unidad. Obtengo "No se puede crear un archivo cuando ese archivo ya existe" error. A continuación está mi código.No se puede crear un archivo cuando ese archivo ya existe cuando se usa Directory.Move

¿alguien podría sugerir al respecto?

 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

¿Qué le gustaría si los archivos existen en el destino, anular?o fusionar –

+1

no tengo ninguna carpeta o archivo en el destino, solo quiero mover mi carpeta de origen a la carpeta de destino – user1428019

Respuesta

15

Como se indicó en las dos respuestas anteriores, el Directorio de destino no puede existir. En su código está creando el Directorio si no existe y luego intenta mover su directorio, el Método Move creará el directorio por usted. Si el Directorio ya existe, deberá Eliminarlo o Moverlo.

Algo como esto:

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

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

"Este método lanza una IOException si, por ejemplo, intenta mover c: \ mydir en c: pública, y c \:. \ Pública ya existe Debe especificar" c: \ public \ mydir "como el parámetro destDirName, siempre que" mydir "no exista en" c: \ public ", o especifique un nuevo nombre de directorio como" c: \ newdir "."

+0

que he intentado dando al destino como F: \ destination \ source, pero el mismo error es obtener. – user1428019

4

No es necesario crear el directorio primero, arrojará IO excepción, si existe el directorio de destino, Move método crea automáticamente por usted:

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

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

Más infomación de Directory.Move:

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

+0

Si existe un directorio de destino, este código no moverá los archivos del directorio de origen al directorio de destino. – BornToCode

2

Según MSDN,

este método produce una IOException si, por ejemplo, intenta mover c: \ mydir en c: \ pública, y c: \ pública ya existe.

Pero, en su método, está creando el directorio de destino antes de mudarse.

Por lo tanto, tiene que cambiar su método de

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

a

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

Sólo puede llamar

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

Lo que hace internamente es que crea el directorio de destino si no existe y luego repite los archivos del directorio de origen y los mueve al directorio de destino. De esta forma, no se producirá el problema de "No se puede crear un archivo cuando ese archivo ya existe".

Deberá agregar Microsoft.VisualBasic como referencia.

Cuestiones relacionadas