Estaba haciendo una aplicación en rails donde necesitaba mostrar el tamaño del fichero que el usuario podía descargar. Ruby cuenta con el método File.size pero devuelve el tamaño en bytes y claro, que un archivo pese 3670016 bytes por ejemplo, no es que sea muy esclarecedor, así que añadí una función a la clase File que muestra el tamaño en la unidad más grande posible:
file_util.rb:
class File
@@units = ['bytes', 'kb', 'mb', 'gb', 'tb']
def File.readable_size(file_name)
size = File.size(file_name).to_f
pos = 0
while size / 1024 >= 1
size = size / 1024
pos += 1
end
size = format("%.1f", size)
return size.to_s + " " + @@units[pos]
end
end
Ejemplo de uso:
require 'file_util'
file_name = "foo"
size = (1.5 * 1024 * 1024).to_i # 1.5 mb
#creamos un fichero de prueba con el tamaño indicado
File.open(file_name, "w") do
|file|
size.times do
file << 'x'
end
end
puts File.size(file_name) # 1572864
puts File.readable_size(file_name) # 1.5 mb
Puedes usar human_size(1572864)