Подписаться на RSS рассылку
Главная » Статьи по Delphi » Файлы » Узнать размер файла в байтах

Узнать размер файла в байтах

Автор: Nomad

function GetFileSize(FileName: string): Int64; 
var F: TMemoryStream;
begin
  try
    F:=TMemoryStream.Create;
    F.LoadFromFile(FileName);
    Result:=F.Size;
  finally
    F.Free;
  end;
end;

Функция возвратит размер файла FileName в байтах. Чтобы получить размер в килобайтах, результат нужно поделить на 1024.

Пример использования:

procedure TForm1.Button1Click(Sender: TObject); 
var SizeOfApp: Int64;
begin
  SizeOfApp := GetFileSize(ParamStr(0));
  ShowMessage('Размер приложения: '+IntToStr(SizeOfApp)+
      ' байт('+IntToStr(SizeOfApp div 1024)+' кб)');
end;
По нажатию на кнопку выскочит мессаджбокс, с размерами исполняемого файла проекта.

В качестве параметра для функции GetFileSize было использовано ParamStr(0). Подробнее читаем в статье Определение пути к разрабатываемой программе

Просмотров: 15397

Обсудить на форуме

+1   Спам
(30.06.2010)
8. mr.monk
WinAPI рулит. не надо изобретать велосипед.

var
hFile, fileSize: Integer;
fileName: String;
begin
...
hFile := FileOpen(flieName, fmOpenRead);
fileSize := GetFileSize(hFile, nil);
FileClose(hFile);

// результат в переменной fileSize
end;


0   Спам
(02.12.2009)
7. Unnamed_user
Ну это кагбе простой вариант... wink

0   Спам
(02.12.2009)
6. Сергей (POGiMplayer)
А вообще проще говоря все нормальные люди юзают GetFileSize виндовый.

0   Спам
(02.12.2009)
5. Сергей (POGiMplayer)
Равиль (ZuBy) ну ты ***ц замудрил, даже я ничерта не разобрался

0   Спам
(24.11.2009)
4. fesh
Спасибо, очень помогло

0   Спам
(02.08.2009)
3. Роман Новиков
А нафига файл грузить в оперативку? А если он под нескольго гигов весит? К тому же есть поток TFileStream, более целесообразно его использовать нежели TMemoryStream. Связали поток с файлом и пользуем интерфейс.

// Если файл не существует, то вместо размера файла функция верн¸т -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;


0   Спам
(13.07.2009)
2. Антон (Digy)
не, точно не проще)

0   Спам
(13.07.2009)
1. Равиль (ZuBy)
а не проще так:

function GetFileSize(namefile: string): Int64;
var
InfoFile: TSearchRec;
AttrFile: Integer;
ErrorReturn: Integer;
begin
AttrFile := $0000003F; // Any file
ErrorReturn := FindFirst(namefile, AttrFile, InfoFile);
if ErrorReturn <> 0 then
Result := -1 // в случае, если файл не найден
else
begin
Result := InfoFile.FindData.nFileSizeHigh; // Размер файла в байтах
Result := Result shl 32;
Result := Result or InfoFile.FindData.nFileSizeLow;
end;
FindClose(InfoFile);
end;
{$WARNINGS ON}

function GetNormalSize(Size: Int64): string;
var
kb, Mb, Gb: Real;
begin
Result := IntToStr(Size) + ' b';
kb := Size / 1024;
kb := Trunc(kb * 10) / 10;
if kb < 0.7 then
Exit;
Result := FloatToStr(kb) + ' kb';
Mb := kb / 1024;
Mb := Trunc(Mb * 10) / 10;
if Mb < 0.7 then
Exit;
Result := FloatToStr(Mb) + ' Mb';
Gb := Mb / 1024;
Gb := Trunc(Gb * 10) / 10;
if Gb < 0.7 then
Exit;
Result := FloatToStr(Gb) + ' Gb';
end;

использовать:
label1.Caption := GetNormalSize(GetFileSize(Filename));



Имя *:
Email:


Код *:

Copyright © 2008-2016 Программирование на Delphi для начинающих и не только

Полнота авторских прав на все материалы, опубликованные на сервере DelphiDevelop.ru принадлежит их авторам

Перепечатка материалов разрешается с указанием авторства и гиперссылки на первоисточник информации

Хостинг от uCoz

Автор проекта: Борисов Сергей

e-mail: save-x@yandex.ru

Связь с администрацией сайта