mover ejemplo delete copia como archivos another c# file-io

ejemplo - file.move overwrite c#



File.Move no funciona: el archivo ya existe (7)

De acuerdo con los documentos para File.Move, no hay ningún parámetro "sobrescribir si existe". Intentó especificar la carpeta de destino, pero debe proporcionar la especificación completa del archivo.

Leyendo los documentos nuevamente ("proporcionando la opción de especificar un nuevo nombre de archivo"), creo que puede ser útil agregar una barra invertida a la especificación de la carpeta de destino.

Tengo una carpeta:

c: / test

Estoy intentando este código:

File.Move(@"c:/test/SomeFile.txt", @"c:/test/Test");

Me sale una excepción:

El archivo ya existe

El directorio de salida definitivamente existe y el archivo de entrada está allí.


Debe moverlo a otro archivo (en lugar de a una carpeta), esto también se puede usar para cambiar el nombre.

Movimiento:

File.Move(@"c:/test/SomeFile.txt", @"c:/test/Test/SomeFile.txt");

Rebautizar:

File.Move(@"c:/test/SomeFile.txt", @"c:/test/SomeFile2.txt");

La razón por la que dice "El archivo ya existe" en su ejemplo, se debe a que C:/test/Test intenta crear un archivo Test sin una extensión, pero no puede hacerlo porque ya existe una carpeta con el mismo nombre.


Lo que necesitas es:

if (!File.Exists(@"c:/test/Test/SomeFile.txt")) { File.Move(@"c:/test/SomeFile.txt", @"c:/test/Test/SomeFile.txt"); }

o

if (File.Exists(@"c:/test/Test/SomeFile.txt")) { File.Delete(@"c:/test/Test/SomeFile.txt"); } File.Move(@"c:/test/SomeFile.txt", @"c:/test/Test/SomeFile.txt");

Esto:

  • Si el archivo no existe en la ubicación de destino, mueva el archivo con éxito, o;
  • Si el archivo existe en la ubicación de destino, elimínelo, luego mueva el archivo.

Editar: ¡Debo aclarar mi respuesta, a pesar de que es la más votada! El segundo parámetro de File.Move debe ser el archivo de destino , no una carpeta. Está especificando el segundo parámetro como la carpeta de destino, no el nombre de archivo de destino, que es lo que File.Move requiere. Por lo tanto, su segundo parámetro debe ser c:/test/Test/SomeFile.txt .


Personalmente prefiero este método. Esto sobrescribirá el archivo en el destino, eliminará el archivo fuente y también evitará eliminar el archivo fuente cuando la copia falle.

string source = @"c:/test/SomeFile.txt"; string destination = @"c:/test/test/SomeFile.txt"; try { File.Copy(source, destination, true); File.Delete(source); } catch { //some error handling }


Pruebe Microsoft.VisualBasic.FileIO.FileSystem.MoveFile(Source, Destination, True) . El último parámetro es el interruptor de sobrescritura, que System.IO.File.Move no tiene.


Puede hacer una P / Invocación a MoveFileEx() - pasar 11 para las flags ( MOVEFILE_COPY_ALLOWED | MOVEFILE_REPLACE_EXISTING | MOVEFILE_WRITE_THROUGH )

[return: MarshalAs(UnmanagedType.Bool)] [DllImport("kernel32.dll", SetLastError=true, CharSet=CharSet.Unicode)] static extern bool MoveFileEx(string existingFileName, string newFileName, int flags);

O bien, puedes simplemente llamar

Microsoft.VisualBasic.FileIO.FileSystem.MoveFile(existingFileName, newFileName, true);

después de agregar Microsoft.VisualBasic como referencia.


Si el archivo realmente existe y desea reemplazarlo, utilice el siguiente código:

string file = "c:/test/SomeFile.txt" string moveTo = "c:/test/test/SomeFile.txt" if (File.Exists(moveTo)) { File.Delete(moveTo); } File.Move(file, moveTo);