Книга: Delphi. Учимся на примерах

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

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

Разработаем процедуру копирования файла. Это можно было бы реализовать средствами 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) //сообщение об ошибке
 else begin
  {Если ошибок не было, то выводим окно об успешном окончании копирования}
  ShowMessage('Успешно скопировано!');
 end;
end;

? Различные конструкции языка Object Pascal (комментарии, операторы ветвления, обработка исключений и др.) рассматриваются в приложении Г.

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

Процедура doit вызывается при нажатии кнопки Копировать:

procedure TForm1.Button1Click{Sender: TObject);
begin
 doit;
end;

По нажатию кнопки Вырезать должно происходить обычное копирование с последующим удалением скопированного файла:

procedure TForm1.Button5Click(Sender: TObject);
begin
 doit;//копируем
 DeleteFile(from.Text); //удаляем исходный файл
end;

Теперь создадим процедуры выбора и сохранения файла с помощью стандартных диалоговых окон. Для выбора первого (исходного) файла следует создать следующий обработчик события OnClick (кнопке Button2 соответствует поле from):

procedure TForm1.Button2Click(Sender: TObject);
begin
 if Open1.Execute
 then from.Text:= Open1.FileName
 else ShowMessage('Файл не был открыт');
end;

При нажатии кнопки Обзор открывается диалоговое окно выбора файла (Open1.Execute). Если в этом окне пользователь нажал кнопку Отмена (Open1.Execute = False), то сообщаем ему об этом и не выполняем никаких действий. Если пользователь выбрал файл, то копируем путь к нему в соответствующее поле ввода.

Создадим аналогичный обработчик события для выбора пути назначения при копировании первого файла (кнопке Button3 соответствует поле where):

procedure TForm1.Button3Click(Sender : TObject);
begin
 if Save1.Execute
 then where.Text:= Save1.FileName
 else ShowMessage('Вы не выбрали место длясохранения файла!');
end;

Здесь выполняется та же проверка, что и в предыдущем случае. Затем выбранный путь заносится в соответствующее поле ввода, чтобы его, при желании, можно было откорректировать.

Теперь создадим аналогичный обработчик события OnClick для кнопки Обзор, используемой для выбора размещения удаляемого файла :

procedure TForm1.Button4Click(Sender: TObject);
begin
 if Open1.Execute
 then Del.Text:= Open1.FileName
 else ShowMessage('Файл не был открыт!');
end;

Сама кнопка Удалить выполняет при нажатии следующий код:

procedure TForm1.Button6Click(Sender: tobject);
begin
 DeleteFile(Del.Text); //удаляем файл
 if not FileExists(Del.Text)//проверяем существование файла
 then ShowMessage('Файл удален!'); //выводим сообщение
end;

Сначала мы удаляем файл, а затем проверяем, существует ли он на диске после выполнения операции удаления. Если его не существует, то выводим сообщение об успешном удалении файла. Теперь можно откомпилировать и запустить программу на выполнение. Внешний вид окна Работа с файлами в действии показан на рис. 2.2.


Рис. 2.2. Программа Работа с файлами в действии

Оглавление книги


Генерация: 0.036. Запросов К БД/Cache: 0 / 0
поделиться
Вверх Вниз