![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
10 000 000 -> 10 Mb
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 выпускают?
Alex Bigbugov (2003-06-07 09:43:00) [1]
Изображение в винде и у тебя не расходились? Вот у меня 80-ник, так в закладке файла подкачки свободного места показывает -36 Gb, тебе это надо?
elected (2003-06-06 02:17:00) [2]
=-))))))
Вспомнил анекдот
Чем отличается ламер от программера...
Ламер догадывается что в киллобайте 1024 байта...
,а программер твердо уверен что в киллограмме 1024 грамма
Нуу (2003-06-06 02:08:00) [3]
Не знаю насколько "горячие" и насколько "эстонские" те два парня,
но dRake © (05.06.03 23:51) - точно прошел мимо.
dRake (2003-06-05 23:51:00) [4]
На вот тебе эту функцию, которую я сам юзаю в одной из своих прог
думаю разберёшься :)
function GetString( value : Int64) : string;
var temp : real;
begin
if value >= 1024*1024 then Begin;
temp := value/1024;
result := FloatToStrF(temp,ffGeneral,5,6) + " Kb";
end;
if (value > 1024*1024) and (value <= 1000*1024*1024) then Begin;
temp := value/(1024*1024);
result := FloatToStrF(temp,ffGeneral,5,6) + " Mb"
end;
if value > 1000*1024*1024 then Begin;
temp := Trunc(value/(1024*1024));
result := FloatToStrF(temp,ffGeneral,5,6) + " Gb"
end;
________________________________________________________
На вход даёшь ей значение в байтах
на выходе получаешь строку типа 10,23 Mb
Palladin (2003-06-05 20:48:00) [5]
:)
McSimm (2003-06-05 17:12:00) [6]
:))
Anatoly Podgoretsky (2003-06-05 17:09:00) [7]
Ну успокоились горячие эстонские парни.
McSimm (2003-06-05 16:37:00) [8]
> приведенное мною конечно ему не подойдет по причине Anatoly
> Podgoretsky ©
Хотя бы по той простой причине, что вопрос был не тот. Человек задал корректный вопрос об использовании конкретной функции.
Не было вопроса как перевести быйты в мегабайты и.т.п. Был вопрос где ошибка в таком-то использовании функции. А ему рассказали, что использовать эту функцию глупо, что расчитывай и форматируй сам и т.п.
> я не буду с вами спорить, потому что
Однако задуматься стоит над своим безосновательным выпадом (05.06.03 13:13)
Бывают вопросы глупые. Бывают глупо сформулированные. Можно и посмеятся(без перехода на личности). Но тут-то все в порядке, а оказывается " не ужели такие еще есть...". Какие "такие"?
Вот это меня и задело.
Palladin (2003-06-05 16:22:00) [9]
по причине их "веса" в общем коде и условий их исполнения...
вы мастер или где, или вы меня экзаменируете...
приведенное мною конечно ему не подойдет по причине Anatoly Podgoretsky © (05.06.03 14:34), а точнее по 2 пункту его хотелки...
я не буду с вами спорить, потому что он(спор) уже перешел на борьбу принципов, а это пустая трата времени...
McSimm (2003-06-05 16:05:00) [10]
> Palladin таким образом хотел показать, что чем пол часа
> расспрашивать всех в форуме, можно было за пять минут написать
> такую же процедуру самому...
Во-первых, вы уверены, что такую же? Во-вторых, гораздо лучше один раз разобраться в возникшей проблеме и сделать корректно, чем за пол-часа найти обходной путь.
> не уместно сравнивать использование...
Почему?
Palladin (2003-06-05 15:20:00) [11]
мда... цепляемся уже... Ваши зацепки не уместны...
мне не трудно, да и исходники в Sources...
не уместно сравнивать использование FloatToStrF и
Function __SGuStrFormatByteSize(_dw:DWord;_pszBuf:PChar;_cchBuf:UINT):PChar;StdCall;External "shlwapi.dll" Name "StrFormatByteSizeA";
[lamer]Barmaglot (2003-06-05 15:16:00) [12]
то McSimm © (05.06.03 15:09)
Не надо так нервничать.
Palladin таким образом хотел показать, что чем пол часа расспрашивать всех в форуме, можно было за пять минут написать такую же процедуру самому...
McSimm (2003-06-05 15:09:00) [13]
>Palladin © (05.06.03 14:23)
>result:=floattostrf(p_fBytes,ffGeneral,4,2)+levels[l];
>трюдно да?
Если уж взялся, доводи до конца. Зачем использовать floattostrf??? Что, самому написать трудно?
T2 (2003-06-05 14:40:00) [14]
Всем спасибо - вопрос снят.
Anatoly Podgoretsky (2003-06-05 14:38:00) [15]
T2 © (05.06.03 14:31)
Использовать функцию GetDiskFreeSpaceEx
Anatoly Podgoretsky (2003-06-05 14:34:00) [16]
Palladin © (05.06.03 14:23)
После его уточнения (2. Не хочу, чтоб моя функция и отображение Винов "расходились"), не стоило приводить собственную функцию, поскольку это может привести именно к этому самому расхождению и натурное испытание не поможет, надумает Микрософт мерить в попугаях и все насмарку, придется делать проверки на версии ОС и библиотеке. Подход у него правильный. Просто коряво он делал объяснение.
Vulko © (05.06.03 14:26)
К него другой вопрос.
[lamer]Barmaglot (2003-06-05 14:33:00) [17]
Человек хочет разобраться с функциями Windows... Пусть разбирается. Почитать можно как это не странно на msdn.microsoft.com в поле поиска вводишь функцию по которой хочешь почитать и читаешь...
T2 (2003-06-05 14:31:00) [18]
2 Palladin>
Snx
2 Vulko>
Это ясно, но как тогда быть с размером винта?
2 [lamer]Barmaglot >
Snx, не знал..
Vulko (2003-06-05 14:26:00) [19]
> Использую встроенную функцию Windows, но после 4 Gb формат
> переводится не верно
У тебя наверное Фат - он не поддерживает файлы бодьше 4 гигов.
[lamer]Barmaglot (2003-06-05 14:25:00) [20]
Человек хочет разобраться с функциями Windows... Пусть разбирается. Почитать можно как это не странно на msdn.microsoft.com в поле поиска вводишь функцию по которой хочешь почитать и читаешь...