Rewrote getFileSizeString

-Function now implements binary search instead of that if-clause mess.
-Constants are now defined for 1 KB, 1 MB, 1 GB instead of repeated 1024 multiplication/division.
-String contains a double formatted to 1 decimal place; the previous code attempted to print 3 decimal places but used integer division.
-Removed the file_size <= 0 check. We should print "0 B" instead of "", and negative file_sizes should throw an error elsewhere.