![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
размер длинного файла [D7, XP]
Alex_andr © (2005-11-24 21:00:00)Как получить размер файла если его длинна 5-10 Гбайт? Функция FileSize имеет тип LongInt т.е. не более 2147483647 Байт.
Может чего не так понимаю, подскажите пожалуйста.
Alex_andr (2005-11-25 00:08:00) [1]Большое спасибо всё понял!
Джо (2005-11-24 23:41:00) [2]Если же эта функция не подходит, а не подходить она может по 2 причинам:
1. Ей нужно передавать хэндл уже открытого файла, что не всегда желательно и
2. Она существует, начиная с Win2K.
тогда можно получить желаемое использовав функцию FindFirst. С ее помощью можно получить структуру WIN32_FIND_DATA, которая, в свою очередь, содержит поля с 2-мя двойными словами размера файла. Т.е, сделать что-то вроде:
function MakeInt64 (H,L: DWord): Int64;
begin
Result := H or L shl 32;
end;
function GetLongFileSize(AFileName: string): Int64;
var
SR: TSearchRec;
begin
if FindFirst(AFileName,faAnyFile,SR) = 0 then
begin
Result := MakeInt64(SR.FindData.nFileSizeHigh,
SR.FindData.nFileSizeLow);
FindClose (SR);
end
else
Result := -1;
end;
Джо (2005-11-24 23:36:00) [3]
> [3] Alex_andr (24.11.05 22:53)
Нужно использовать GetFileSizeEx, именно эта функция позволяет получить 64-битное значение.
Zeqfreed (2005-11-24 23:18:00) [4]Alex_andr (24.11.05 22:53) [3]
А как обращаться с не API-функциями ты знаешь?
Alex_andr (2005-11-24 22:53:00) [5]Спасибо, но мне это не помогло.
Я понятия не имею как обращаться с API-функциями в моих книгах они только перечислены и всё. Может кто показать пример или адресок, где это описано.
Anatoly Podgoretsky (2005-11-24 21:20:00) [6]А надо ли использовать файлы Паскаля?
qp (2005-11-24 21:00:00) [7]GetFileSize