![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#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; когда файл размером 3+ гб, он отображает отрицательное число и не правильное.. как можно доработать её ? например файл 3 662 918 кб (3,49 гб) у меня отображается как -544139589 байт помогите пожалуйста |
#2
|
|||
|
|||
![]() 1. Все скорее всего нормально. Просто size имеет тип Int64. Скорее всего у тебя просто переполнение целочисленного типа. Поставь у функции тип Int64.
2. Можно воспользоваться функцией API GetFileSize. Только надо помнить, что она возвращает БЕЗЗНАКОВОЕ 32-битное целое. |
#3
|
|||
|
|||
![]() да я догадался что там переполнение) просто не совсем ознакомился с функцией (вообще как общее понятие) и искал ответ в var а не в function GetFileSize(FileName: String): Integer;
|
#4
|
|||
|
|||
![]() Код:
var ResultFile: TWin32FindData; // информация о файле InFName:String; // полное имя файла(имя+путь) Size:Int64; //размер файла ... FindFirstFile(PChar(InFName), ResultFile); Size:=(ResultFile.nFileSizeHigh)*4294967296+ResultFile.nFileSizeLow; |
#5
|
|||
|
|||
![]() да я уже давно разобрался, спасибо
![]() только что у тебя я вообще не понимаю ![]() и еще, можно ли создать тип больше чем int64 (если вдруг не влезет) ? |
#6
|
|||
|
|||
![]() Цитата:
Цитата:
Я ни в чем никогда не уверен... И в этом тоже... ![]() |
#7
|
|||
|
|||
![]() а как создать больше? перечислимым type есть ограничение... например в 2 раза больше чем int64
![]() |