Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

10 000 000 -> 10 Mb


Страницы:   1 2 3

T2 ©   (2003-06-05 13:03:00) 

Каким образо перевести байты (размер файла например) в Windows представление (byte,Mb,Gb). Использую встроенную функцию Windows, но после 4 Gb формат переводится не верно. Где ошибка?

{S} Function __SGuStrFormatByteSize(_dw:DWord;_pszBuf:PChar;_cchBuf:UINT):PChar;StdCall;External "shlwapi.dll" Name "StrFormatByteSizeA";

Ведь диски уже больше 4 Gb выпускают?


Palladin   (2003-06-05 14:25:00) [21]


> McSimm © (05.06.03 14:00)

вопрос можно трактовать очень широко, и кто как хотел так его и понял...
я не буду поднимать вопрос о человеческом восприятии размытых вещей...


Palladin   (2003-06-05 14:23:00) [22]

ну блин, писал писал, все что уже написали :) и не запостили

function FormatByteValue(p_fBytes:extendet):string;
const
levels:array [1..5] of string =("b","Kb","Mb","Gb","Tb");
var
l,i:integer;
begin
for i:=1 to 5 do
begin
l:=i;
if p_fBytes<1023 then break
( p_fBytes,ffGeneral,4,2)

ну блин, писал писал, все что уже написали :) и не запостили

function FormatByteValue(p_fBytes:extendet):string;
const
levels:array [1..5] of string =("b","Kb","Mb","Gb","Tb");
var
l,i:integer;
begin
for i:=1 to 5 do
begin
l:=i;
if p_fBytes<1023 then break
else p_fBytes:=p_fBytes/1024;
end;
result:=floattostrf(p_fBytes,ffGeneral,4,2)+levels[l];
end;

трюдно да?


T2   (2003-06-05 14:20:00) [23]

Это все мелочи. :)
Так как же мне решить этот вопрос?

Повторюсь:

StrFormatByteSize64 - пишет, точка входа не найдена

StrFormatByteSizeW - почемуто дает только 1 число - 6.8 Gb -> говорит 6.

Кстати, где об этих функциях прочитать можно?


Anatoly Podgoretsky   (2003-06-05 14:13:00) [24]

Ну наверно если бы вопрос T2 © (05.06.03 13:03) был вместе с T2 © (05.06.03 13:56) и звучал бы примерно так:
Какой функцией мне вопользоваться вместо "StrFormatByteSizeA", поскольку это работает только до 4 гигабайт, то наверно этого орешника не было. Ну это уже к вопросу как правильно задавать вопросы.


Skier   (2003-06-05 14:07:00) [25]

>McSimm © (05.06.03 14:00)
В исходном вопросе нет ни слова о "форматировании строки".


McSimm   (2003-06-05 14:00:00) [26]

Вообще-то странно...
Вполне нормальный вопрос, к тому же абсолютно корректно заданный.

Вас ведь не спросили "подскажите функцию для перевода байтов в килобайты"

Если бы у человека возник вопрос по использованию функции
FormatDateTime(), вы бы на него накинулись?
"Ламер! Не знаешь как разбить TDateTime на составляющие" :)

>Зачем встроенные функции?
Действительно, зачем? Да еще так много. Надо как минимум половину выбросить нафиг.

>вот это да...
>меня вопрос поразил до костного мозга, не ужели такие еще есть...

Когда костный мозг подлечишь, попробуй понять суть вопроса. Потом попробуй на него ответить. Глядишь - изменишь мнение.

>Насколько я помню производители винчестеров считают кило, мега
Это абсолютно не в тему. Мало ли кто как считает - вопрос о форматировании строки.


Palladin   (2003-06-05 13:58:00) [27]

в магазин за углом на такси катаемся?


T2   (2003-06-05 13:56:00) [28]


2 All
Да знаю я все это уже :)

Мне надо: получить стандартное отображение (Windows) размера файла (диска и т.п.) как в проводнике Windows.
1. Не хочу сам писать функцию (уже есть в Виндах).
2. Не хочу, чтоб моя функция и отображение Винов "расходились"
3. Интерестно разобраться со встоенной функцией.


T2   (2003-06-05 13:52:00) [29]

2 McSimm>

StrFormatByteSize64 - пишет, точка входа не найдена

StrFormatByteSizeW - почемуто дает только 1 число - 6.8 Gb -> говорит 6.

Кстати, где об этих функциях прочитать можно?


k-man   (2003-06-05 13:50:00) [30]


> А вообще вопрос достоин "Орешника" - даже моя бабушка сможет
> перевести байты в килобайты и т.д.

согласен. Самое интересное что парень с высшим образованием.


Anatoly Podgoretsky   (2003-06-05 13:45:00) [31]

T2 © (05.06.03 13:23)
Так тебе размер надо получить или перевести?
Если первое, то ты пользуешься не той штукой, если второе, то уже разжевали.


Skier   (2003-06-05 13:42:00) [32]

>Palladin © (05.06.03 13:40)
Скорее всего так им считать проще :)


Palladin   (2003-06-05 13:40:00) [33]


> Skier © (05.06.03 13:15)

есть такое :)
так размер больше получается...


DrPass   (2003-06-05 13:38:00) [34]

... как объяснить ламеру, что такое байт?
- Восемь раз объяснить ему, что такое бит.
А как объяснить ламеру, что такое килобайт?
- Это слишком долго рассказывать...

А вообще вопрос достоин "Орешника" - даже моя бабушка сможет перевести байты в килобайты и т.д.


Skier   (2003-06-05 13:35:00) [35]

>Игорь Шевченко © (05.06.03 13:32)
:))


Игорь Шевченко   (2003-06-05 13:32:00) [36]

Из словаря:

MEGABYTE - американское название килобайта.


Anatoly Podgoretsky   (2003-06-05 13:25:00) [37]

Skier © (05.06.03 13:15)
Так у них в метре 98 сантиметров.
"а в попугаях то я длиннее"

T2 © (05.06.03 13:03)
кило = 2^10
мега = кило^2
гига = кило^3
и так далее


McSimm   (2003-06-05 13:23:00) [38]

Чтобы использовать числа > 2^32 используй
StrFormatByteSize64
или
StrFormatByteSizeW

В качестве параметра для них используй переменную Int64


T2   (2003-06-05 13:23:00) [39]

Все равно, даже если задать текущий диск (размер у которого более 4 Gb) в виде параметра (DiskSize(0)) - размер все равно даже близко не определяется.

Function Size(Sz:Int64):String;
Var Buf:Array[0..79] Of Char;
Begin
Result:=__SGuStrFormatByteSize(Sz,Buf,SizeOf(Buf));
End;

Для диска размером 7 Gb выдает 2.82 Gb


T2   (2003-06-05 13:17:00) [40]

Так надо ж еще определять границу перехода в следующий разряд (и к томуже - если есть встроенная - зачем свою писть).


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо