Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.08.08;
Скачать: [xml.tar.bz2];

Вниз

Тупой вопрос: как перевести байты в Кб, Мб? :)   Найти похожие ветки 

 
panov ©   (2004-07-27 12:02) [40]

а, понятно.
т.е. нужно получить значение с некоторым количеством знаков после запятой.

Вот только я не нашел, где посмотреть в Windows такие значения можно.
Везде выдается в б, Кб, Мб, Гб


 
Игорь Шевченко ©   (2004-07-27 12:43) [41]

panov ©   (27.07.04 12:02)


> Вот только я не нашел, где посмотреть в Windows такие значения
> можно.


В проводнике, правой кнопкой


 
panov ©   (2004-07-27 12:56) [42]


type
sofType=(sofB,sofKB,sofMB,sofGB);

function SizeOfFile(const FilePath: String;const sType: sofType=sofB): Double;
var
 Size: Int64;
 FS: THandle;
 FD: WIN32_FIND_DATA;
begin
 Result := -1;

 FS := FindFirstFile(PChar(FilePath),FD);

 if  FS <> INVALID_HANDLE_VALUE then
 begin
   Size := (FD.nFileSizeHigh shl 32) + FD.nFileSizeLow;
   windows.FindClose(FS);
   case sType of
     sofB: Result := Size;                         //б
     sofKB: Result := Size / 1024;               //Кб
     sofMB: Result := Size / (1024*1024);        //Мб
     sofGB: Result := Size / (1024*1024*1024);   //Гб
   end;
 end;
end;


Получение результата:

FormatFloat("0.00",SizeOfFile("c:\AVG6DB_F.DAT",sofMB))


Провери на нескольких файлах, вроде бы правильно показывает.


 
Игорь Шевченко ©   (2004-07-27 13:20) [43]


> Провери на нескольких файлах, вроде бы правильно показывает.


Есть файл размером 15251 байт. Windows показывает 14,8 кб, твой код 14,9

Еще раз: в Windows не используются операции с плавающей точкой для определения размеров файлов.


 
panov ©   (2004-07-27 13:33) [44]

>Игорь Шевченко ©   (27.07.04 13:20) [43]
Мне интересно, как Windows определяет, сколько знаков после запятой показать в каждом случае.


 
Игорь Шевченко ©   (2004-07-27 13:40) [45]


> Мне интересно, как Windows определяет, сколько знаков после
> запятой показать в каждом случае.


А какие случаи бывают ? У меня с одним знаком показывает.
Дело в том, что Windows не округляет значение, а отбрасывает незначащие цифры.


 
panov ©   (2004-07-27 13:41) [46]

>Игорь Шевченко ©   (27.07.04 13:40) [45]

У меня показывает и с двумя, и с одним знаком - для  разных файлов.


 
Anatoly Podgoretsky ©   (2004-07-27 13:53) [47]

Чтобы не ломали голову, перейдите к понятию проценты
1024=100%


 
Anatoly Podgoretsky ©   (2004-07-27 13:55) [48]

округлить до сотых и размер не сходится с Виндовским, Виндоус не округляет до сотых. О чем постоянно и говорят здесь.


 
panov ©   (2004-07-27 14:20) [49]

by Игорь Шевченко:
http://www.scalabium.com/faq/dct0165.htm

А вот из MSDN:

StrFormatByteSizeW Function

--------------------------------------------------------------------------------

Converts a numeric value into a string that represents the number expressed as a size value in bytes, kilobytes, megabytes, or gigabytes, depending on the size.

Syntax

LPTSTR StrFormatByteSizeW(          LONGLONG qdw,
   LPWSTR pwszBuf,
   UINT cchBuf
);
Parameters

qdw
[in] Numeric value to be converted.
pwszBuf
[out] Pointer to the converted string.
cchBuf
[in] Size of pwszBuf, in characters.
Return Value

Returns the address of the converted string, or NULL if the conversion fails.

Remarks

The first parameter of this function has a different type for the ANSI and Unicode versions. If your numeric value is a DWORD, you can use StrFormatByteSize with text macros for both cases. The compiler will cast the numerical value to a LONGLONG for the Unicode case. If your numerical value is a LONGLONG, you should use StrFormatByteSizeW explicitly.

Example

      532 -> 532 bytes
     1340 -> 1.3KB
    23506 -> 23.5KB
  2400016 -> 2.4MB
2400000000 -> 2.4GB
Function Information

Minimum DLL Version shlwapi.dll version 4.71 or later
Custom Implementation No
Header shlwapi.h
Import library shlwapi.lib
Minimum operating systems Windows 2000, Windows NT 4.0 with Internet Explorer 4.0, Windows 98, Windows 95 with Internet Explorer 4.0


 
Stager   (2004-07-27 16:17) [50]

А можно и я немного поумничаю?

Кб = килобиты
Мб = мегабиты
КБ = килоБАЙТЫ
МБ = мегаБАЙТЫ


 
faost ©   (2004-07-27 16:30) [51]


> Stager   (27.07.04 16:17) [50]
> А можно и я немного поумничаю?
>
> Кб = килобиты
> Мб = мегабиты
> КБ = килоБАЙТЫ
> МБ = мегаБАЙТЫ


Я тебе сотни варинатов могу привести, где Кб (Kb) - это килобиты имеются ввиду, а не килобайты ))


 
Stager   (2004-07-27 17:09) [52]

Ну так а я о чем?

Маленькая буква "б" или "b" - биты. Большая - байты. Насколько я знаю, это достаточно общепринятый стандарт, по крайней мере - в московских компьютерных журналах.


 
Игорь Шевченко ©   (2004-07-27 17:31) [53]


> по крайней мере - в московских компьютерных журналах


Те, кто писал Windows, вряд ли их читали :)



Страницы: 1 2 вся ветка

Форум: "Основная";
Текущий архив: 2004.08.08;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.54 MB
Время: 0.056 c
4-1088319931
djone
2004-06-27 11:05
2004.08.08
Parent


6-1086847094
axx
2004-06-10 09:58
2004.08.08
Вопрос то TServerSocket


1-1090649821
Fagot
2004-07-24 10:17
2004.08.08
SAM


1-1090930435
GrayFace
2004-07-27 16:13
2004.08.08
Чем отличаются GetMem и AllocMem?


14-1090554279
ИМХО
2004-07-23 07:44
2004.08.08
Теория заговоров в большом спорте





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский