Меню сайта
Форма входа
Категории раздела
Общие статьи об INDY [6] INDY IN DEPTH [18]
Учебник созданный авторами INDY
Видеоуроки INDY [3] Основы Delphi [9]
Работа с файлами [6]
Главная » Статьи » Delphi » Работа с файлами

Определение размера файла
 Передо мной никогда не стояла задача определения размера файла Delphi. Но после того как где-то увидел вопрос: "как определить размер файла", мне тоже стало интересно.

   Определение размера файла это то же самое, что определение роста удава в известном мультике! Сколько байтов в него поместится, таков и его размер. План такой:
  1. Задаём тип данных размером 1 байт. Это будет запись.
  2. Определяем файловую переменную этого типа.
  3. Начинаем с начала файла и переходим к концу. Сколько переходов - столько и байтов в файле!
   Программа будет состоять из Формы, на которую бросим компонент выбора файла - OpenDialog и кнопку Button, по нажатию на которую и будем выбирать файл. Вот, собственно, и обработчик этой кнопки:

procedure TForm1.ButtonClick(Sender: TObject);
type TSize = Record
  Bait: byte;
end;
var F: File of TSize;
  Size: Integer;
begin
Size:=0;
with OpenDialog1 do
 if Execute then
   begin
      AssignFile(F, FileName);
      Reset(F);
      while (not EOF(F)) do
        begin
          Size:=Size+1;
          seek(F, Size);
        end;
Form1.Caption:=IntToStr(Size); // Выводим информацию о размере в заголовок Формы
CloseFile(F);
   end;
end;

   Программа была написана за пять минут, что называется, "на коленке". Она работает, и для файлов размером до нескольких мегабайт время ожидания результата невелико, несколько секунд. Для больших файлов ожидание затягивается, и программа выглядит "зависшей". Можно изменить программу так, чтобы она считала килобайты (заменить seek(F, Size) на seek(F, Size*1024)). Скорость работы возрастёт в 1024 раза, и уже будет приемлемой.

   Это была ещё одна демонстрация приёмов работы с файлами. А на самом деле всё гораздо проще! Размер файла возвращается встроенной функцией FileSize. А файл достаточно описать как имеющий тип byte:

procedure TForm1.ButtonClick(Sender: TObject);
var F: File of byte;
  Size: Integer;
begin
with OpenDialog1 do
 if Execute then
   begin
      AssignFile(F, FileName);
      Reset(F);
      Size:=Filesize(F);
      Form1.Caption:=IntToStr(Size); // Выводим информацию о размере в заголовок Формы
      CloseFile(F);
   end;
end;

   Есть альтернативный способ работы с файлами Delphi, в котором файл рассматривается как объект. Там также есть встроенные способы определения размера файла. Также приведу процедуру целиком:

procedure TForm1.ButtonClick(Sender: TObject);
var F: TFileStream;
begin
with OpenDialog1 do
  if Execute then
    begin
      F:=TFileStream.Create(Filename, fmOpenRead);
      Caption:=IntToStr(F.Size);
      F.Free;
    end;
end;
Категория: Работа с файлами | Добавил: nazgull (24.12.2012)
Просмотров: 945 | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Ссылки