Сайт для программистов

вторник, 28 октября 2008 г.

Функция StrFormatByteSize

Сегодня хочу рассказать вам об интересной функции Windows API StrFormatByteSize. Особенность этой функции в том, что вы передаете ей большое число (размер вашего диска), а она автоматически выдает результат в удобном виде, например, 1.4кб или 1.4Гб и т.д. Хочу обратить ваше внимание, что ANSI-версия этой функции может работать до 1.99Гб. Конечно, такое ограничение нас не устроит, если даже флешки уже стали по 32 Гб и выше. Но, не все так плохо. Unicode-функция может возвращать до 7.99 Эбайт. Большинство из вас даже не знают, что такое Эбайт. Эбайт (сокр. от Эксабайт) - это очень огромная цифра. Вы уже слышали, что появились жесткие диски с объемом Терабайт. Так вот, после терабайтов идут петабайты и только потом эксабайты. Трудно представить, что в обозримом будущем появятся накопители такой емкости. Еще одна особенность функции - названия байтов выдается на родном языке. На русском - Кб, Мб, Гб, а английском - kb, gb и т.д.
Вот как выглядит объявление функции на C#
[DllImport("Shlwapi.dll", CharSet = CharSet.Auto)]public static extern long StrFormatByteSize( long dw,[MarshalAs(UnmanagedType.LPTStr)] StringBuilder pszBuf, int cchBuf );

Создаем для нее обертку и выводим результат
public static string FormatByteSize(long fileSize)
{
StringBuilder sbBuffer = new StringBuilder(20);
StrFormatByteSize(fileSize, sbBuffer, 20);
return sbBuffer.ToString();
}
// Выбираем максимальное возможное значение
MessageBox.Show(FormatByteSize(long.MaxValue));

Описание параметров и примеры на Visual Basiс будут доступны в моем справочнике по фунциями Windows API.
Счастливого вам программирования!

Комментариев нет: