################################################################ class CatalogoArchivos ################################################################ public def initialize() @version = "0.1" end ################################################################ public def ejecutar(ruta, titulo, destino) estructura = leerEstructura(ruta) html = generarDocumentoHTML(titulo, estructura) escribirArchivo(destino, html) end ################################################################ private # Lee recursivamente los archivos y carpetas ubicadas bajo la 'ruta' especificada # retornando un arreglo que contiene esta información. def leerEstructura(ruta) # Arreglo con el resultado resultado = Array.new # Obtiene los archivos de la ruta solicitada listado = Dir.entries(ruta).sort # Se revisa cada uno de las entradas obtenidas ... listado.each {|file| # Se eliminan los directorios actual y padre. if file == "." || file == ".." then next end # Se complementa el nombre del archivo con la ruta completa de su ubicación. elemento = ruta + "\\" + file # Si es un directorio se realiza el llamado recursivo. # Si es un archivo se agrega al resultado. if File.directory?(elemento) then resultado += leerEstructura(elemento); else resultado.push(elemento) end } return resultado end ################################################################ private # Escribe el 'contenido' solicitado a un archivo llamado 'nombre'. def escribirArchivo(nombre, contenido) archivo = File.new(nombre, "w") if archivo == nil then return false end return archivo.puts(contenido) end ################################################################ private # Prepara la salida HTML con la información provista por el 'arreglo'. Agrega el 'compilado_titulo' al # comienzo del documento. def generarDocumentoHTML(compilado_titulo, arreglo) str = "" + "Listado de archivos" + "" + "" + "" + "" str += "
#{compilado_titulo}
" ultima_carpeta = nil str += "" # Por cada uno de los elementos en el arreglo ... for elemento in arreglo ################################################################# # Obtiene el nombre del archivo archivo = File.basename(elemento) # Obtiene la ruta de la carpeta (sin incluír el nombre del archivo). carpeta = File.dirname(elemento) # Obtiene la extensión de un nombre de archivo. extension = File.extname(elemento) # Obtiene el color del fondo según la extensión del nombre del archivo. fondo = obtenerColorSegunExtension(extension) # Obtiene el tamaño y la fecha de modificación del archivo. tamano = File.size(elemento) fecha = File.mtime(elemento) ################################################################# # Genera el registro correspondiente a una carpeta. if carpeta != ultima_carpeta then str += "" ultima_carpeta = carpeta end # Genera el registro correspondiente al archivo con el fondo escogido. str += "" end str += "
#{carpeta}
#{archivo}#{tamano}#{fecha}


Generado con CatalogoArchivos #{@version} en #{DateTime.now}" return str end ################################################################ private # Retorna un color estilo HTML/CSS según la extensión especificada. def obtenerColorSegunExtension(extension) extension = extension[1 ... extension.length] return case extension.upcase when 'DOC', 'DOCX': '#C6ECFF' when 'XLS', 'XLSX': '#DBFFDB' when 'PPT', 'PPTX': '#FFDAB5' when 'PDF', 'XPS': '#C8C8FA ' when 'EXE', 'COM': '#C8D0D5' when 'CAB', 'ZIP', 'TAR', 'TGZ', 'GZ', 'RAR': '#FFFF71' when 'JPG', 'JPEG', 'BMP', 'GIF', 'PNG': '#D5D5FF' when 'HTM', 'HTML': '#FFCAE4' when 'AVI', 'MPG', 'MPEG', 'WMV': '#FFB7DB' when 'MP3', 'WAV', 'WMA', 'OGG': '#E0F3C2' when 'TXT', 'INI', 'BAT': '#CEFFFF' else '#EDEDDA' end end ################################################################ end ################################################################ def mostrarAyuda() puts "ruby #{__FILE__} [\"Titulo\"]" puts "\nDesarrollado por Jorge Iván Meza Martínez " end ################################################################ # Muestra el mensaje de ayuda según el número de parámetros de la linea # de comando especificados. if $*.length == 0 || $*.length == 1 || $*.length > 3 then # Parámetros de linea de comando mostrarAyuda exit end $separador = File::Separator # Establece los parámetros del llamado. ruta_origen = $*[0] archivo_destino = $*[1] compilado_titulo = $*[2] != nil ? $*[2] : 'Contenido del medio' # Crea una instancia del generador de catálogos y lo ejecuta para crear el archivo resultante. ca = CatalogoArchivos.new() ca.ejecutar(ruta_origen, compilado_titulo, archivo_destino) ################################################################