Delphi. Учимся на примерах | страница 4



Ниже разместим две кнопки (компоненты Button), присвоим их свойствам Caption значения Копировать и Вырезать. Под этими кнопками разместим компоненты, которые будут использоваться для выбора и удаления файлов: компонент Edit для ввода пути к файлу, кнопка вызова диалогового окна обзора и кнопка для удаления файла.

Свойству Edit1.Name присвоим значение Del, а свойству Text – путь по умолчанию. Кнопку Обзор разместим справа, а кнопку Удалить файл — под полем Del.

Полученная форма должна соответствовать рис. 2.1.

Рис. 2.1. Форма Работа с файлами

Разработка программного кода

Разработаем процедуру копирования файла. Это можно было бы реализовать средствами WinAPI, однако в этом случае процедура, хотя и была бы менее громоздкой, оказалась бы "привязанной" к системе, что для программ нежелательно, поэтому лучше воспользоваться библиотеками Delphi.

Для начала объявим нашу процедуру (назовем ее doit) как закрытый член класса формы:

>type

>TForm1 = class(TForm)

> ...

>private

> { Private declarations }

> procedure doit;

> public

> { Public declarations }

>end;

Реализацию процедуры создадим в разделе implementation:

Примечание

Здесь и далее при разработке описанных в книге программ комментарии, при желании, можно не вводить. Текст, обязательный для ввода, выделен в листингах полужирным шрифтом.

>procedure TForm1.doit();

>var

> f1, f2: file of Byte; //Работа с первым и вторым файлом

> сор: Byte; //Для побайтового копирования

> sizez: LongInt; //Хранит размер файла

>begin

> {$I-} //Отключаем директиву, которая отслеживает ошибки

> //ввода/вывода

try //Начало блока обработки исключений

>  //Связываем файловую переменную f1 с первым файлом

>  AssignFile(f1, from.Text);

>  //Связываем файловую переменную f2 со вторым файлом

>  AssignFile(f2, where.Text);

>  Reset(f1);  //Открываем первый файл на чтение

>  sizez:= Trunc(FileSize(f1)); //Определяем размер файла

>  //Отображаем размер файла для пользователя

>  Label4.Caption:= IntToStr(sizez div 1024) + 'Кб';

>  {Создаем второй файл или перезаписываем его, если он уже существует}

>  Rewrite(f2);

>  while not Eof(f1) do

>  begin //Пока не достигнут конец первого файла

>   //Считываем один байт из первого файла

>   BlockRead(fl, cop, 1);

>   //Записываем один байт во второй файл

>   BlockWrite(f2, cop, 1);

>  end;

>  CloseFile(f1); //Закрываем первый файл

>  CloseFile(f2); //Закрываем второй файл

finally;

> end;//Конец блока обработки исключений

if IOResult<> 0 //Если возникла ошибка ввода-вывода

then MessageDlg('Ошибка при копировании файла!', mtError, [mbOk],0)