Pregunta

Estoy tratando de cambiar el nombre de un directorio en c # a un nombre que es el mismo solo con un caso diferente.

Por ejemplo: f: \ prueba a f: \ PRUEBA

He intentado este código:

var directory = new DirectoryInfo("f:\\test");
directory.MoveTo("f:\\TEST");

y obtengo una IOException: la ruta de origen y de destino debe ser diferente. También he intentado Directory.Move () con el mismo resultado.

¿Cómo se hace esto? ¿Tengo que crear un directorio temporal diferente, mover los archivos contenidos desde el directorio original al directorio temporal y luego borrar el original y renombrar el directorio temporal?

¿Fue útil?

Solución

Bueno, no es necesario crear un directorio separado y mover todo. Simplemente cambie el nombre de la carpeta a algo diferente y luego vuelva al nombre que desea:

var dir = new DirectoryInfo(@"F:\test");
dir.MoveTo(@"F:\test2");
dir.MoveTo(@"F:\TEST");

Otros consejos

¿Por qué no renombrar el directorio temp y luego renombrar nuevamente a TEST ?

Incluso si el método .NET DirectoryInfo.MoveTo lanza una excepción si el nombre es el mismo, puede llamar a la API de Windows MoveFile funciona de esta manera para configurar la carcasa del nombre del directorio:

bool success = MoveFile(dirInfo.FullName, dirInfo.FullName);

Con esta declaración externa:

[DllImport("kernel32", SetLastError = true)]
private static extern bool MoveFile(string lpExistingFileName, string lpNewFileName);

Funciona bien para mí cuando el nombre difiere solo en el caso. No he intentado llamarlo así cuando el nombre ya es exactamente como se especifica.

Esto tiene la ventaja de que el directorio nunca desaparece con su nombre original.

Sin embargo, tiene la desventaja de que solo funciona en Windows.

La respuesta es sí en este caso: el sistema de archivos no ve a los dos como diferentes, por lo que deberá eliminar y agregar como nuevo nombre (o mover / eliminar / mover como sugirió)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top