Delphi World - это проект, являющийся сборником статей и малодокументированных возможностей  по программированию в среде Delphi. Здесь вы найдёте работы по следующим категориям: delphi, delfi, borland, bds, дельфи, делфи, дэльфи, дэлфи, programming, example, программирование, исходные коды, code, исходники, source, sources, сорцы, сорсы, soft, programs, программы, and, how, delphiworld, базы данных, графика, игры, интернет, сети, компоненты, классы, мультимедиа, ос, железо, программа, интерфейс, рабочий стол, синтаксис, технологии, файловая система...
Получить размер файла

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

function Get_File_Size1(sFileToExamine: string; bInKBytes: Boolean): string;
 { 
 for some reason both methods of finding file size return 
 a filesize that is slightly larger than what Windows File 
 Explorer reports 
}
 var
   FileHandle: THandle;
   FileSize: LongWord;
   d1: Double;
   i1: Int64;
 begin
   //a- Get file size 
  FileHandle := CreateFile(PChar(sFileToExamine),
     GENERIC_READ,
     0, {exclusive}
     nil, {security}
     OPEN_EXISTING,
     FILE_ATTRIBUTE_NORMAL,
     0);
   FileSize   := GetFileSize(FileHandle, nil);
   Result     := IntToStr(FileSize);
   CloseHandle(FileHandle);
   //a- optionally report back in Kbytes 
  if bInKbytes = True then
   begin
     if Length(Result) > 3 then
     begin
       Insert('.', Result, Length(Result) - 2);
       d1     := StrToFloat(Result);
       Result := IntToStr(round(d1)) + 'KB';
     end
     else
       Result := '1KB';
   end;
 end;

 {****************************************************************************** 
Thanks to Advanced Delphi Systems here's another method which works just as 
well returning the same results 
*******************************************************************************}
 function Get_File_Size2(sFileToExamine: string; bInKBytes: Boolean): string;
 var
   SearchRec: TSearchRec;
   sgPath: string;
   inRetval, I1: Integer;
 begin
   sgPath := ExpandFileName(sFileToExamine);
   try
     inRetval := FindFirst(ExpandFileName(sFileToExamine), faAnyFile, SearchRec);
     if inRetval = 0 then
       I1 := SearchRec.Size
     else
       I1 := -1;
   finally
     SysUtils.FindClose(SearchRec);
   end;
   Result := IntToStr(I1);
 end;



 procedure TForm1.Button1Click(Sender: TObject);
 begin
   if OpenDialog1.Execute then
     label1.Caption := Get_File_Size(Opendialog1.FileName, True);
 end;

 {*******************************************************************************}

 function Get_File_Size3(const FileName: string): TULargeInteger;
 // by nico 
var
   Find: THandle;
   Data: TWin32FindData;
 begin
   Result.QuadPart := -1;
   Find := FindFirstFile(PChar(FileName), Data);
   if (Find <> INVALID_HANDLE_VALUE) then
   begin
     Result.LowPart  := Data.nFileSizeLow;
     Result.HighPart := Data.nFileSizeHigh;
     Windows.FindClose(Find);
   end;
 end;

 procedure TForm1.Button1Click(Sender: TObject);
 begin
   if (OpenDialog1.Execute) then
     ShowMessage(IntToStr(Get_File_Size3(OpenDialog1.FileName).QuadPart));
 end;

 {*******************************************************************************}

 function Get_File_Size4(const S: string): Int64;
 var
   FD: TWin32FindData;
   FH: THandle;
 begin
   FH := FindFirstFile(PChar(S), FD);
   if FH = INVALID_HANDLE_VALUE then Result := 0
   else
     try
       Result := FD.nFileSizeHigh;
       Result := Result shl 32;
       Result := Result + FD.nFileSizeLow;
     finally
       CloseHandle(FH);
     end;
 end;
Проект Delphi World © Выпуск 2002 - 2004
Автор проекта: ___Nikolay