Renombrando Directorio con el mismo nombre, caso diferente
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?
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ó)