Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Как узнать размер файла?


Автор: CyberBullDog 30.1.2007, 19:33
Мне нужно узнать размер файла, который находится на лазерном диске.

Пробовал два варианта.
При вызове функции Reset() (открыть файл для чтения) сразу появляется сообщение об ошибке.
Еще один вариант - FindFirst(...,SR), а потом SR.Size должен вернуть размер, но при этом он долго думает и решает, что размер файла=0.
Среда Delphi7.

Подскажите, если кто знает как определить размер?

Автор: Matematik 30.1.2007, 19:51
Ошибка в 17 строке.
Код

if FindFirst('d:\test\file.txt', faanyfile, ssr)=0 then
  ssr.Size - размер
CloseFind(ssr)

Автор: W4FhLF 30.1.2007, 19:54
Код

var
  dwSize, hFile: dword;
begin
  hFile := CreateFile(pChar('F:\file_on.cd'),GENERIC_READ,FILE_SHARE_READ,nil,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
  dwSize := GetFileSize(hFile, 0);
  CloseHandle(hFile);


Прекрасно работает.

Автор: CyberBullDog 30.1.2007, 20:37
Спасибо всем!!!

Разобрался.

Автор: ivan219 8.2.2007, 18:08
3 Функции нахождения размера файла:
Код

function FSize1(FileName: PChar):Cardinal; //Минемальное время поиска.
var
  F: HFILE;
begin
 F:=_lopen(FileName, OF_READ);
 Result:=_llseek(F ,0 , FILE_END);
 _lclose(F);
end;

function FSize2(FileName: PChar):Cardinal; //Максимальное время поиска.
var
  SearchRec: TSearchRec;
begin
 Result:=0;
 if FindFirst(ExpandFileName(FileName) ,faAnyfile ,SearchRec )=0 then 
  Result:=SearchRec.Size;
 FindClose(SearchRec);
end;

function FSize3(FileName: PChar):Cardinal; //Чуть больше чем у FSize1.
var
  hFile: Cardinal;
begin
 hFile := CreateFile(FileName,GENERIC_READ,FILE_SHARE_READ,nil,
                     OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
 Result:= GetFileSize(hFile, nil);
 CloseHandle(hFile);
end;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)