Topic "Human-readable file size?"

Author Message
Guest




I think this question may be asked before. I did some search, but didn't get answer. Does WinSCP have human-readable file size scaling as commonly seen as the -h switch in ls and du commands? For example, 2500 bytes -> 2.4 KB, 1234567 bytes -> 1.2 MB. FileZilla seems have such an option, but I like WinSCP better. Very Happy
Advertisements
martin
[View user's profile]
Site Admin
Joined: 2002-12-10
Posts: 26299
Location: Prague, Czechia
WinSCP shows human readable size on file properties dialog. I suppose you want it on file panel?
_________________
Martin Prikryl
Guest




Yes, or more precisely in the explorer panel, like Windows Explorer and many other similar applications do. It is annoying to right-click -> left-click on more than 100 files, isn't it? I suppose it is not that difficult to implement, but quit useful for users.

P.S. In my WinSCP, I don't have the "Calculate" button as shown in the screenshot. Is it only available in certain cases?

Thanks for reply!
martin
[View user's profile]
Site Admin
Joined: 2002-12-10
Posts: 26299
Location: Prague, Czechia
This request has been added to tracker.
_________________
Martin Prikryl
TomR
[View user's profile]

Joined: 2009-11-01
Posts: 1
Location: NYC
I was taking a look at this bug, I made some progress on it.

In UnixDirView.cpp first I added a function to display filesizes in a human readable format:

Code:
AnsiString TUnixDirView::FormatFileSize(__int64 size)
{
  const __int64 B  = 1;
  const __int64 KB = 1024 * B;
  const __int64 MB = 1024 * KB;
  const __int64 GB = 1024 * MB;

  if(size > GB)
    return FormatFloat("0.## GB", size / GB);
  else if(size > MB)
    return FormatFloat("0.## MB", size / MB);
  else if(size > KB)
    return FormatFloat("0.## KB", size / KB);
  else
   return FormatFloat("0.## b", size);
}


Then I changed TUnixDirView::GetDisplayInfo

Code:
case uvSize:
  // expanded from ?: to avoid memory leaks
  if (!File->IsDirectory)
  {
   Value = FormatFileSize(File->Size);
  }
  break;



But this only affects the remote pane not the local pane. I couldn't for the life of me find where that was happening.

Later on, I found the FormatBytes function in GUITools.cpp. If you add a reference to GUITools.h at the top of UnixDirView.cpp, you can use that function and ignore mine completely:

Code:
case uvSize:
  // expanded from ?: to avoid memory leaks
  if (!File->IsDirectory)
  {
   Value = FormatBytes(File->Size);
  }
  break;


I kept looking and I eventually found that the display for the local pane was governed by a Pascal Function FormatSize in BaseUtils.pas. I edited those two functions to format the size in the same manner as FormatBytes.

Code:
function FormatSize(Size: Cardinal): string;
var
  i: Integer;
  p: Integer;
  suffix: string;
begin
  p := 0;
  i := 3;
 
  if Size < (100*1024) then begin {b}
   suffix := ' B';
  end else if Size < (100*1024*1024) then begin {KB}
   Size := Cardinal(Round(Size / 1024));
   suffix := ' KiB';
  end else begin {MB}
   Size := Cardinal(Round(Size / (1024 * 1024)));
   suffix := ' MiB';
  end;
 
  Result := IntToStr(Size);
  while i + p < Length(Result) do
  begin
    Insert(ThousandSeparator, Result, Length(Result) - (i + p)+ 1);
    Inc(p);
    INC(i, 3);
  end;
  Insert(Suffix, Result, Length(Result) + 1)
end; {FormatSize}

function FormatSize(Size: Int64): String;
var
  i: Integer;
  p: Integer;
  suffix: string;
begin
  p := 0;
  i := 3;
 
  if Size < (100*1024) then begin {b}
   suffix := ' B';
  end else if Size < (100*1024*1024) then begin {KB}
   Size := Round(Size / 1024);
   suffix := ' KiB';
  end else begin {MB}
   Size := Round(Size / (1024 * 1024));
   suffix := ' MiB';
  end;

  Result := IntToStr(Size);
  while i + p < Length(Result) do
  begin
    Insert(ThousandSeparator, Result, Length(Result) - (i + p)+ 1);
    Inc(p);
    Inc(i, 3);
  end;
 
  Insert(Suffix, Result, Length(Result) + 1)
 
end; {FormatSize}



Searching for "#,##0" brings up some other locations where the filesize should probably be edited. But when I edited those, I didn't see any change, so since I can't test that code, I left it alone.



I hope this helps - I decided I needed to kick myself and contribute something to Open Source.
martin
[View user's profile]
Site Admin
Joined: 2002-12-10
Posts: 26299
Location: Prague, Czechia
Thanks Tom. I have raised priority for this.
_________________
Martin Prikryl
pandaking
[View user's profile]

Joined: 2010-04-22
Posts: 1
+1

I'd much rather in my file list it showed "KB", "MB", "GB" etc. than the current system.
Any news on adding this feature?
mattcredp

Guest


has this functionality been added? I can't find the option on my install (4.3.3 build1340)
Robotobo
[View user's profile]

Joined: 2016-12-27
Posts: 2
There are 3 options in Show file sizes in: Bytes, Kilobytes, Short Format

Short Format only shows in Megabytes but doesn't show in Gigabytes.

Can we please add Gigabytes?

+1
martin
[View user's profile]
Site Admin
Joined: 2002-12-10
Posts: 26299
Location: Prague, Czechia
Robotobo wrote:
There are 3 options in Show file sizes in: Bytes, Kilobytes, Short Format

Short Format only shows in Megabytes but doesn't show in Gigabytes.

Can we please add Gigabytes?

+1

It should show Gigabytes. As with other units, only if the files is at least 100 units large (100 GB in this case).
Robotobo
[View user's profile]

Joined: 2016-12-27
Posts: 2
I have a 2GB file, why does it show in Megabytes?

If I have files that are over 1024 Megabytes each, I want to show them in Gigabytes, not megabytes.

I haven't seen any program that forcefully shows files in megabytes when files are 1-10 gigabyte files.

Every FTP/SFTP program supports showing filesizes in gigabytes, why does a file have to 100 GB to show in gigabytes in WinSCP?

---

For example in attached file below, file is over 1024 Megabytes or 1000 Megabytes (whatever notation you are going for)

And it says 1.074 MB, it looks like it's 1 Megabytes and has few other kilobytes

It doesn't look right to me, no operating system does this
size.png (2.9 KB)

Description: (none)

size.png

martin
[View user's profile]
Site Admin
Joined: 2002-12-10
Posts: 26299
Location: Prague, Czechia
Robotobo wrote:
Every FTP/SFTP program supports showing filesizes in gigabytes, why does a file have to 100 GB to show in gigabytes in WinSCP?

What every FTP/SFTP client?

Anyway, thanks for your suggestion.
Will see if more people ask for this.
jwruffin

Guest


I'll chime in that I'd also like to see this implemented. Should switch units when the file size is over 1 unit, not 100 as it does currently. Files that are 1,500 MB should show up as 1.46 GB, etc. Threshold of 100 units is too high.
foy

Guest


As martin wants to see more people asking, I'm with jwruffin. It would be much more useful (informative, intuitive, immediate) to me that WinSCP (best there is) stepped up the unit the moment it passes the 1, no threshold.
Kudos
martin
[View user's profile]
Site Admin
Joined: 2002-12-10
Posts: 26299
Location: Prague, Czechia
martin wrote:
Robotobo wrote:
Every FTP/SFTP program supports showing filesizes in gigabytes, why does a file have to 100 GB to show in gigabytes in WinSCP?

What every FTP/SFTP client?

Anyway, thanks for your suggestion.
Will see if more people ask for this.

This request has been added to the tracker:
https://winscp.net/tracker/show_bug.cgi?id=1530

I'm sending you an email with a development version of WinSCP to the address you have used to register on this forum.
Advertisements

You can post new topics in this forum






Search Site

What is WinSCP?

It is award-winning SFTP client, SCP client, FTPS client and FTP client integrated into one software program for file transfer to FTP server or secure SFTP server. [More]

And it's free!

Donate

About donations

$9   $19   $49   $99

About donations

Recommend

WinSCP Privacy Policy

WinSCP License