Как я получаю человекочитаемый размер файла в сокращении байтов с помощью.NET?

265
задан Bart 16 February 2014 в 03:30
поделиться

5 ответов

Это не самый эффективный способ сделать это, но легче читать, если Вы не знакомы с математикой журнала и должны быть достаточно быстрыми для большинства сценариев.

string[] sizes = { "B", "KB", "MB", "GB", "TB" };
double len = new FileInfo(filename).Length;
int order = 0;
while (len >= 1024 && order < sizes.Length - 1) {
    order++;
    len = len/1024;
}

// Adjust the format string to your preferences. For example "{0:0.#}{1}" would
// show a single decimal place, and no space.
string result = String.Format("{0:0.##} {1}", len, sizes[order]);
339
ответ дан David Thibault 23 November 2019 в 02:26
поделиться

Я предполагаю, что Вы ищете "1,4 МБ" вместо "1 468 006 байтов"?

я не думаю, что существует встроенный способ сделать это в.NET. Необходимо будет просто выяснить, какая единица является соответствующей, и отформатируйте ее.

Редактирование: вот некоторый пример кода, чтобы сделать просто что:

http://www.codeproject.com/KB/cpp/formatsize.aspx

2
ответ дан Peter Crabtree 23 November 2019 в 02:26
поделиться
string[] suffixes = { "B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB" };
int s = 0;
long size = fileInfo.Length;

while (size >= 1024)
{
    s++;
    size /= 1024;
}

string humanReadable = String.Format("{0} {1}", size, suffixes[s]);
7
ответ дан bobwienholt 23 November 2019 в 02:26
поделиться
int size = new FileInfo( filePath ).Length / 1024;
string humanKBSize = string.Format( "{0} KB", size );
string humanMBSize = string.Format( "{0} MB", size / 1024 );
string humanGBSize = string.Format( "{0} GB", size / 1024 / 1024 );
11
ответ дан TcKs 23 November 2019 в 02:26
поделиться
[DllImport ( "Shlwapi.dll", CharSet = CharSet.Auto )]
public static extern long StrFormatByteSize ( 
        long fileSize
        , [MarshalAs ( UnmanagedType.LPTStr )] StringBuilder buffer
        , int bufferSize );


/// <summary>
/// Converts a numeric value into a string that represents the number expressed as a size value in bytes, kilobytes, megabytes, or gigabytes, depending on the size.
/// </summary>
/// <param name="filelength">The numeric value to be converted.</param>
/// <returns>the converted string</returns>
public static string StrFormatByteSize (long filesize) {
     StringBuilder sb = new StringBuilder( 11 );
     StrFormatByteSize( filesize, sb, sb.Capacity );
     return sb.ToString();
}

От: http://www.pinvoke.net/default.aspx/shlwapi/StrFormatByteSize.html

71
ответ дан Bob 23 November 2019 в 02:26
поделиться