################################################################
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 += "| #{carpeta} |
"
ultima_carpeta = carpeta
end
# Genera el registro correspondiente al archivo con el fondo escogido.
str += "| #{archivo} | #{tamano} | #{fecha} |
"
end
str += "
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)
################################################################