89 / 70 / 9
Регистрация: 04.03.2012
Сообщений: 206
1

Формат строки

16.07.2012, 21:11. Показов 1123. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, есть:
1) функция определяющая размер папки с файлами:

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
procedure GetDirSize(const aPath: string; var SizeDir: Int64);
var
  SR: TSearchRec;
  tPath: string;
begin
  tPath := IncludeTrailingBackSlash(aPath);
  if FindFirst(tPath + '*.*', faAnyFile, SR) = 0 then
  begin
    try
      repeat
        if (SR.Name = '.') or (SR.Name = '..') then
          Continue;
        if (SR.Attr and faDirectory) <> 0 then
        begin
          GetDirSize(tPath + SR.Name, SizeDir);
          Continue;
        end;
        SizeDir := SizeDir +
          (SR.FindData.nFileSizeHigh shl 32) +
          SR.FindData.nFileSizeLow;
      until FindNext(SR) <> 0;
    finally
      Sysutils.FindClose(SR);
    end;
  end;
end;
и вызов:
Delphi
1
2
3
4
5
6
7
var
SizeDir: Int64;
begin
 SizeDir := 0;
  Begin
 GetDirSize(dir, SizeDir);
Label9.Caption :=FormatFloat('Размер базы - '+'###,### ,###Мв ,###кб ,##0 байт', SizeDir);
так получается - 57 Мв 245 кб 168 байт, если убрать "##0 байт", т.е.
Delphi
1
Label9.Caption :=FormatFloat('Размер базы - '+'###,### ,###Мв ,###кб', SizeDir);
то получается - 57 245 Мв 168 кб

2) функция определяющая размер файла:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
//Если файл не существует, то вместо размера файла функция вернёт -1
function GetFileSize(FileName: String): Integer;
 var
   FS: TFileStream;
 begin
   try
     FS := TFileStream.Create(Filename, fmOpenRead);
   except
     Result := -1;
   end;
   if Result <> -1 then Result := FS.Size;
   FS.Free;
 end;
Delphi
1
2
3
4
5
6
7
8
var
  ty:integer;
....
    ty:=GetFileSize(ExtractFilepath(Application.ExeName)+'Имя_Файла');
   if ty>1024000 then
label5.Caption:=FormatFloat('Размер файла - '+'###,### ,###Мв ,###кб,##0 байт', ty)
else
label5.Caption:=FormatFloat('Размер файла - '+'###,### ,###,###кб ,##0 байт', ty);
так получается - 7 Мв 245 кб 168 байт, если убрать "##0 байт", т.е.
Delphi
1
Label5.Caption :=FormatFloat('Размер файла - '+'###,### ,###Мв ,###кб', SizeDir);
то получается - 7 245 Мв 168 кб

Как сделать что бы было нормальное отображение без байт, т.е.
57 Мв 245 кб
7 Мв 245 кб
P.S. Если есть (так сказать) - более простые функции,- поделитесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.07.2012, 21:11
Ответы с готовыми решениями:

Формат строки
Уважаемые форумчане! Можно ли в VB c помощью ф-ции format разделить строку? Т.е. дана строка...

Формат строки
Доброе время суток! Возник такой вопрос, вот код, ниже объясню. switch (message) { ...

Формат командной строки
Нужно выполнить задание. Есть X потоков в которых лежит по объекту, эти объекты я в случайном...

Формат строки в макросе
Добрый день, что-то я уже запутался. Как мне получить строку после обработки форматом для...

2
1922 / 1158 / 422
Регистрация: 31.05.2012
Сообщений: 4,091
16.07.2012, 22:18 2
Делим на 1024 - получаем размер в килобайтах. Остаток - байты. Частное если больше или равно 1024 - делим на 1024 - получаем размер в мегабайтах. Остаток - килобайты. И т.д. Для целочисленного деления используется div. Остаток можно получить или с помощью mod, или вычитая из делимого произведения делителя на частное. Вообщето 5-ый класс
0
Житель Земли
3002 / 3004 / 391
Регистрация: 26.07.2011
Сообщений: 11,463
Записей в блоге: 1
23.07.2012, 10:44 3
моя функция (писал давно. можно усовершенствовать, но не хочу )
Delphi
function GetFileSizeStr(const FName: string): string;
const
  b = ' áàéò';
var
  FS: TFileStream;
  FileSizeb: int64;
  MainSize: Extended;
  m: string;
begin
  FileSizeb:= 0;
  try
    FS:= TFileStream.Create(FName,fmOpenRead);
    FileSizeb:= FS.Size;
    m:= ' áàéò ';
    MainSize:= FileSizeb;
    if MainSize > 1024 then
    begin
      MainSize:= MainSize / 1024;
      m:= ' Êá ';
      if MainSize > 1024 then
      begin
        MainSize:= MainSize / 1024;
        m:= ' Ìá ';
      end;
      if MainSize > 1024 then
      begin
        MainSize:= MainSize / 1024;
        m:= ' Ãá ';
      end;
    end;
    Result:= FloatToStrF(MainSize,ffNumber,6,2) + m + '(' +
    IntToStr(FileSizeb) + b + ')';
  finally
    FS.Free;
  end;
  if FileSizeb <= 0 then Result:= '0 áàéò';
end;
Добавлено через 12 минут
возвращает результат по виндоузски, т.е. к примеру 8,00 Кб (8192 байт)
1
23.07.2012, 10:44
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.07.2012, 10:44
Помогаю со студенческими работами здесь

Парсинг строки в формат DateTime
Доброго времени суток, форумчане. У меня возник вопрос с парсингом строки в формат DateTime. На...

Спарсить 2 строки формат json
Привет, подскажите пожалуйста. Есть такой json код! ...

Формат строки(размер файла)
Здравствуйте! Имеется такой код TextBox1.Text = &quot;Скачивание обновлений. Загружено байт: &quot; +...

Формат строки при выводе из БД
Здравствуйте! Из БД в datagridview вывожу данные, через SqlDataAdapter SqlDataAdapter da = new...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru