• Что бы вступить в ряды "Принятый кодер" Вам нужно:
    Написать 10 полезных сообщений или тем и Получить 10 симпатий.
    Для того кто не хочет терять время,может пожертвовать средства для поддержки сервеса, и вступить в ряды VIP на месяц, дополнительная информация в лс.

  • Пользаватели которые будут спамить, уходят в бан без предупреждения. Спам сообщения определяется администрацией и модератором.

  • Гость, Что бы Вы хотели увидеть на нашем Форуме? Изложить свои идеи и пожелания по улучшению форума Вы можете поделиться с нами здесь. ----> Перейдите сюда
  • Все пользователи не прошедшие проверку электронной почты будут заблокированы. Все вопросы с разблокировкой обращайтесь по адресу электронной почте : info@guardianelinks.com . Не пришло сообщение о проверке или о сбросе также сообщите нам.

Как Узнать Размер Файла

Sascha Оффлайн

Sascha

Заместитель Администратора
Команда форума
Администратор
Регистрация
9 Май 2015
Сообщения
1,562
Баллы
155
Как узнать размер файла
Вопрос банальный. Но имеет несколько решений.

Решение первое

Код:
uses
  Classes;

// Вернуть размер файла.
function GetFileSize(
  // Имя файла.
  const FileName: String;
  // Размер файла.
  out FileSize: Int64): Boolean; forward;

function GetFileSize(const FileName: String; out FileSize: Int64): Boolean;
var
  FileStream: TFileStream;
begin
  try
    FileStream := TFileStream.Create(FileName, fmOpenRead);
    try
      FileSize := FileStream.Size;
      Result := True;
    finally
      FileStream.Free;
    end;
  except
    Result := False;
  end;
end;

Решение второе

Код:
uses
  Windows;

// Вернуть размер файла.
function GetFileSize(
  // Имя файла.
  const FileName: String;
  // Размер файла.
  out FileSize: Int64): Boolean; forward;

function GetFileSize(const FileName: String; out FileSize: Int64): Boolean;
var
  FileHandle: THandle;
  FileSizeLow, FileSizeHigh: DWORD;
begin
  FileHandle := CreateFile(PAnsiChar(FileName), GENERIC_READ, FILE_SHARE_READ,
    nil, OPEN_EXISTING, FILE_ATTRIBUTE_ARCHIVE, 0);
  Result := FileHandle <> INVALID_HANDLE_VALUE;
  if Result then
  try
    FileSizeLow := Windows.GetFileSize(FileHandle, @FileSizeHigh);
    Int64Rec(FileSize).Hi := FileSizeHigh;
    Int64Rec(FileSize).Lo := FileSizeLow;
  finally
    CloseHandle(FileHandle);
  end;
end;

Решение третье

Код:
uses
  SysUtils;

// Вернуть размер файла.
function GetFileSize(
  // Имя файла.
  const FileName: String;
  // Размер файла.
  out FileSize: Integer): Boolean; forward;

function GetFileSize(const FileName: String; out FileSize: Integer): Boolean;
var
  SearchRecord: TSearchRec;
begin
  Result := FindFirst(FileName, faAnyFile, SearchRecord) = 0;
  if Result then
  try
    FileSize := SearchRecord.Size;
  finally
    FindClose(SearchRecord);
  end;
end;

Решение четвертое

Код:
uses
  SysUtils, Windows;

// Вернуть размер файла.
function GetFileSize(
  // Имя файла.
  const FileName: String;
  // Размер файла.
  out FileSize: Int64): Boolean; forward;

function GetFileSize(const FileName: String; out FileSize: Int64): Boolean;
var
  Win32FindData: TWin32FindData;
  FileHandle: THandle;
begin
  FileHandle := FindFirstFile(PAnsiChar(FileName), Win32FindData);
  Result := FileHandle <> INVALID_HANDLE_VALUE;
  if Result then
  try
    Int64Rec(FileSize).Hi := Win32FindData.nFileSizeHigh;
    Int64Rec(FileSize).Lo := Win32FindData.nFileSizeLow;
  finally
    Windows.FindClose(FileHandle);
  end;
end;

Решение пятое

Код:
// Вернуть размер файла.
function GetFileSize(
  // Имя файла.
  const FileName: String;
  // Размер файла.
  out FileSize: Cardinal): Boolean; forward;

function GetFileSize(const FileName: String; out FileSize: Cardinal): Boolean;
var
  AFile: File of Byte;
begin
  Result := False;
  AssignFile(AFile, FileName);
  Reset(AFile);
  try
    FileSize := System.FileSize(AFile);
    Result := True;
  finally
    CloseFile(AFile);
  end;
end;

Какое решение использовать? Вам решать, но не рекомендую использование третьего и пятого вариантов, так как они ограничивается типамиIntegerиCardinalсоответственно, то есть2147483647и4294967295байтами (2047и4094МБ), остальные способы такого ограничения не имеют.



 
Вверх Снизу