C# no tiene un método «renombrar»: se usa File.Move con el mismo directorio y otro nombre. La única decisión que hay que tomar es qué hacer si ya existe un archivo con el nombre nuevo.
También te puede interesar
Sin
namespace, sin class Program, sin Main. Los ejemplos usan instrucciones de nivel superior, disponibles desde C# 9: el compilador genera esa estructura por ti. Y desde .NET 10 un archivo suelto se ejecuta directamente con dotnet run archivo.cs, sin crear un proyecto. El código de siempre, con su static void Main, sigue funcionando igual. Tampoco hacen falta los using System;, System.IO y compañía: los proyectos modernos los incluyen de forma implícita.Renombrar
string actual = Path.Combine("salida", "copia.txt");
string nuevo = Path.Combine("salida", "renombrado.txt");
File.Move(actual, nuevo);salidamovido: existe el viejo False, el nuevo True
Si el nombre nuevo ya está ocupado
| Llamada | Si el destino existe |
|---|---|
File.Move(a, b) | IOException |
File.Move(a, b, overwrite: true) | lo sustituye |
salidaMove sobre uno que existe: IOException Move con overwrite: true -> sin error
La versión anterior de esta página envolvía el Move en un try que capturaba cualquier excepción y escribía un mensaje genérico. Así se pierde el motivo. Estos son los que puede haber:
| Excepción | Significa |
|---|---|
FileNotFoundException | el archivo de origen no existe |
DirectoryNotFoundException | no existe la carpeta de origen o la de destino |
IOException | el destino ya existe, o el archivo está abierto por otro programa |
UnauthorizedAccessException | no tienes permiso |
En Windows, un archivo abierto por otro programa —un Excel abierto, un registro que alguien está escribiendo— no se puede mover ni renombrar:
IOException. En Linux y macOS sí se puede. Si tu programa tiene que funcionar en los dos, cuenta con ese caso.Con FileInfo
var archivo = new FileInfo(actual); archivo.MoveTo(nuevo, overwrite: true); Console.WriteLine(archivo.Name); // ya apunta al nombre nuevo
Después de MoveTo, el propio objeto FileInfo pasa a referirse a la ruta nueva.
La versión anterior de esta página usaba rutas como
C:\RutaArchivos\ o D:\dev\proyCs\, que solo existían en un ordenador. Aquí se usan rutas relativas y Path.Combine, que pone el separador correcto en cada sistema: el mismo código funciona en Windows, Linux y macOS.Todo el código se ejecutó con .NET 10 en un contenedor limpio antes de publicar esta página; las salidas están copiadas de esa ejecución.