Mega Code Archive

 
Categories / Delphi / Files
 

How to find the size of a file

Title: How to find the size of a file 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;