Что нового

Представление размера файла в понятный вид

AZJIO

Меценат
Меценат
Сообщения
2,892
Репутация
1,196
CreatoR
Вот что использую я:
Вызываемая функция и функция снизу с разными именами.
Проверил скорость:
Код:
$timer = TimerInit()
For $i = 1 To 10000
    _StringGetBytesDisplaySize(Random(1, 1000000000000, 1))
Next
MsgBox(0,"Время выполнения", 'Время : '&Round(TimerDiff($timer) / 1000, 2) & ' сек')

В 4 раза медленнее моей функции. А это важный критерий, так как функция может использоваться в цикле. Наример у меня используется в Create_list_files и список может быть до 100 000 файлов. Поэтому использую Switch вместо конструкции
Код:
Func _ByteSuffix($iBytes, $iRound = 2)
    Local $A, $aArray[9] = [" B", " KB", " MB", " GB", " TB", " PB", " EB", " ZB", " YB"]
    While $iBytes > 1023
        $A += 1
        $iBytes /= 1024
    WEnd
    Return Round($iBytes, $iRound) & $aArray[$A]
EndFunc   ;==>_ByteSuffix

Ограничился 1000 терабайт, так как даже размер жёсткого диска не может это привысить, а для файлов удаляю лишние строки в Switch ограничивая до 100 Гб. Ну и вдобавок в Switch начинается от большего к меньшему, так как при таком раскладе проверяется только первое число, а в случае от меньшего к большему проверяются оба числа и работает в 1,5 раз медленнее.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Viktor1703 сказал(а):
Может есть и другие варианты...

_WinAPI_StrFormatByteSize()
_WinAPI_StrFormatByteSizeEx()
_WinAPI_StrFormatKBSize()

Размер файла на диске:

_WinAPI_GetFileSizeOnDisk()

P.S

Кб - это килобит, для байт принято писать с большой буквы - КБ, МБ и т.д
 
Верх