![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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
|
|||
|
|||
|
да я уже давно разобрался, спасибо
![]() только что у тебя я вообще не понимаю что за "4294967296" ?и еще, можно ли создать тип больше чем int64 (если вдруг не влезет) ? |
|
#6
|
|||
|
|||
|
Цитата:
Цитата:
|