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)