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 :P (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

 

 

 

Una respuesta a “Renombrar archivos”

  1. Renombrar archivos II « Escalera al cielo dijo:

    [...] Renombrar archivos II [...]

Escribe un comentario