let string_of_bytes n =
let (sz, acc) =
List.fold_left
(fun (sz, acc) e ->
let q = Int64.div sz 1024L in
let r = Int64.rem sz 1024L in
let acc =
if r <> 0L then (Printf.sprintf "%Ld %s" r e) :: acc else acc
in (q, acc))
(n, []) [ "B"; "KB"; "MB"; "GB" ] in
let acc = if sz <> 0L then (Printf.sprintf "%Ld TB" sz) :: acc else acc
in match acc with | [] -> "0 B" | _ -> String.concat " " acc