Renombrar archivos
Mayo 11, 2008
Que cosas… pensaba que no había una forma sencilla para renombrar archivos en .Net, pero me di con la sorpresa, con algunos foros de la red, que una forma de renombrarlos es moverlos en la misma carpeta
Solo se debe usar Move, método estático de la clase File; o MoveTo, método de instancia de la clase FileInfo.
Una aplicación que le di a este descubrimiento es el renombrado de mis archivos MP3 recién bajados de Internet, los cuales llegan con algunos caracteres de más. Así que hice una pequeña aplicación de consola que hiciera este trabajito
(eran algo así de 100 archivos… ¡¡imagínense tener que cambiarlo uno por uno!!). El método funciona para los frameworks que tengan las colecciones genéricas, pero si tienes el framework 1.1, solamente tendrias que cambiar el tipo de dato que se devuelve. Enjoy it!
”’ <summary>
”’ Cambia los nombres de los archivos que coincidan con el criterio especificado
”’ </summary>
”’ <param name=”rutaCarpeta”>Ubicación donde encontramos a los archivos</param>
”’ <param name=”criterioBusquedaArchivo”>Patrón de búsqueda que deben cumplir los nombres de los archivos para ser considerados. Seguir el estándar de Windows</param>
”’ <param name=”cadenaReemplazable”>La cadena que será reemplazada</param>
”’ <param name=”cadenaReemplazante”>La nueva cadena que reemplazará a la anterior</param>
”’ <param name=”buscarEnCarpetasInternas”>Indica si se busca en subcarpetas. Por defecto, Sí</param>
”’ <returns>Un listado con los archivos encontrados y sus resultados (positivo o negativo)</returns>
”’ <remarks>Lanzará una excepción del tipo DirectoryNotFoundException si no existe el directorio especificado</remarks>
Public Function CambiarNombres(ByVal rutaCarpeta As String, _
ByVal criterioBusquedaArchivo As String, _
ByVal cadenaReemplazable As String, _
ByVal cadenaReemplazante As String, _
Optional ByVal buscarEnCarpetasInternas As Boolean = True) As IDictionary(Of String, Boolean)
‘Aqui almacenamos temporalmente los nombres de los archivos encontrados
Dim astrNombreArchivos(), strArchivoRenombrado As String
‘Aqui almacenamos los resultados de renombrar cada archivo
Dim aobjArchivosCambiados As Generic.Dictionary(Of String, Boolean) ‘No debería haber dos archivos con el mismo nombre
‘Si existe la ruta podemos proseguir
If Directory.Exists(rutaCarpeta) Then
‘Le asignamos los archivos que coincidan con la búsqueda
astrNombreArchivos = Directory.GetFiles(rutaCarpeta, _
criterioBusquedaArchivo, _
IIf(buscarEnCarpetasInternas, SearchOption.AllDirectories, SearchOption.TopDirectoryOnly))
‘Inicializamos el listado de resultados por cada archivo
aobjArchivosCambiados = New Dictionary(Of String, Boolean)
‘Por cada archivo encontrado
For Each strNombreArchivo As String In astrNombreArchivos
‘Añadimos el resultado como positivo (si no es así lo cambiamos en el error)
aobjArchivosCambiados.Add(strNombreArchivo, True)
strArchivoRenombrado = rutaCarpeta & strNombreArchivo.Substring(strNombreArchivo.LastIndexOf(“\”)).Replace(cadenaReemplazable, cadenaReemplazante)
Try
‘Movemos el archivo con los cambios especificados
File.Move(strNombreArchivo, strArchivoRenombrado)
Catch ex As Exception
‘Cambiamos el resultado a negativo
aobjArchivosCambiados(strNombreArchivo) = False
End Try
Next
Else
Throw New DirectoryNotFoundException( _
String.Format(“No se encontró la carpeta {0}, ” & _
“por lo que no se pudo realizar el renombrado de archivos.”, rutaCarpeta))
End If
‘Recogemos toda el desperdicio de objetos luego de la iteración
GC.Collect()
‘Retornamos los resultados de los archivos
Return aobjArchivosCambiados
End Function
Mayo 11, 2008 en 4:52 pm
[...] Renombrar archivos II [...]