По крайней мере, в Delphi 2009 (не могу протестировать в версии 2010, поскольку у меня ее нет) функция StrFormatByteSize()
является псевдонимом для версии Ansi (StrFormatByteSizeA()
), а не для версии с широким символом (StrFormatByteSizeW()
) как и для большинства других функций Windows API. Поэтому вы должны использовать версию с широким символом напрямую - также для более ранних версий Delphi, чтобы иметь возможность работать с файлами (системой) размером более 4 ГБ.
Нет необходимости в промежуточном буфере, и вы можете использовать тот факт, что StrFormatByteSizeW()
возвращает указатель на преобразованный результат как PWideChar
:
{$IFDEF UNICODE}
function FormatStringByteSize(ASize: int64): string;
{ Return a cardinal as a string formatted similar to the status bar of Explorer }
const
BufLen = 20;
begin
SetLength(Result, BufLen);
Result := StrFormatByteSizeW(ASize, PChar(Result), BufLen);
end;
{$ENDIF}