Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 19.01.2009, 00:10
ApplicatiOn ApplicatiOn вне форума
Активный
 
Регистрация: 28.02.2008
Сообщения: 388
Репутация: -10
По умолчанию Отрицательное число

Получаю размер из файла по функции:

Код:
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;

когда файл размером 3+ гб, он отображает отрицательное число и не правильное.. как можно доработать её ?

например файл 3 662 918 кб (3,49 гб) у меня отображается как -544139589 байт

помогите пожалуйста
Ответить с цитированием
  #2  
Старый 19.01.2009, 00:52
lmikle lmikle сейчас на форуме
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,088
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

1. Все скорее всего нормально. Просто size имеет тип Int64. Скорее всего у тебя просто переполнение целочисленного типа. Поставь у функции тип Int64.
2. Можно воспользоваться функцией API GetFileSize. Только надо помнить, что она возвращает БЕЗЗНАКОВОЕ 32-битное целое.
Ответить с цитированием
  #3  
Старый 19.01.2009, 07:31
ApplicatiOn ApplicatiOn вне форума
Активный
 
Регистрация: 28.02.2008
Сообщения: 388
Репутация: -10
По умолчанию

да я догадался что там переполнение) просто не совсем ознакомился с функцией (вообще как общее понятие) и искал ответ в var а не в function GetFileSize(FileName: String): Integer;
Ответить с цитированием
  #4  
Старый 19.01.2009, 09:05
k@Z@k k@Z@k вне форума
Новичок
 
Регистрация: 31.07.2007
Сообщения: 55
Репутация: 12
По умолчанию

Код:
var  ResultFile: TWin32FindData; // информация о файле
      InFName:String; // полное имя файла(имя+путь)
      Size:Int64; //размер файла
...
 FindFirstFile(PChar(InFName), ResultFile);
 Size:=(ResultFile.nFileSizeHigh)*4294967296+ResultFile.nFileSizeLow;
Ответить с цитированием
  #5  
Старый 19.01.2009, 11:39
ApplicatiOn ApplicatiOn вне форума
Активный
 
Регистрация: 28.02.2008
Сообщения: 388
Репутация: -10
По умолчанию

да я уже давно разобрался, спасибо

только что у тебя я вообще не понимаю что за "4294967296" ?

и еще, можно ли создать тип больше чем int64 (если вдруг не влезет) ?
Ответить с цитированием
  #6  
Старый 19.01.2009, 12:52
Interface Interface вне форума
Активный
 
Регистрация: 23.05.2008
Адрес: Россия, Уфа
Сообщения: 203
Репутация: 1
По умолчанию

Цитата:
только что у тебя я вообще не понимаю что за "4294967296" ?
- я не стал разбираться в коде, но думаю что это 2 в Эной степени, что переводить из кб в б, из гб в кб и т.д. (хотя может я не прав...)
Цитата:
и еще, можно ли создать тип больше чем int64 (если вдруг не влезет) ?
- В Delphi этот тип помойму максимальный... А вот именно "создать" наверное можно...
__________________
Я ни в чем никогда не уверен... И в этом тоже...
Ответить с цитированием
  #7  
Старый 19.01.2009, 12:59
ApplicatiOn ApplicatiOn вне форума
Активный
 
Регистрация: 28.02.2008
Сообщения: 388
Репутация: -10
По умолчанию

а как создать больше? перечислимым type есть ограничение... например в 2 раза больше чем int64
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 02:01.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025