Delphi. Учимся на примерах - [3]

Шрифт
Интервал

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

Процедура 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. Программа Работа с файлами в действии

Полный исходный код модуля

Полный код модуля программы Работа с файлами представлен в листинге 2.1.

Листинг 2.1. Модуль программы Работа с файлами

>unit Unit1;

>interface

>uses

> Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ShellAPI, Gauges;

>type TForm1 = class(TForm)

> from: TEdit;

> where: TEdit;

> Button1: TButton;

> Label1: TLabel;

> Label2: TLabel;

> Label3: TLabel;

> Label4: TLabel;

> Button2: TButton;

> Button3: TButton;

> Open1: TOpenDialog;

> Save1: TSaveDialog;

> Button4: TButton;

> del: TEdit;

> Button5: TButton;

> Button6: TButton;

> procedure Button1Click(Sender: TObject);

> procedure Button2Click(Sender: TObject);

> procedure Button3Click(Sender: TObject);

> procedure Button5Click(Sender: TObject);

> procedure Button4Click(Sender: TObject);

> procedure Button6Click(Sender: TObject);

>private

> { Private declarations }

> procedure doit; //объявление процедуры doit

>public

> { Public declarations }

>end;


>var Form1: TForm1;


>implementation

>{$R *.dfm}


>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(f1, cop, 1);

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

>   BlockWrite(f2, cop, 1);

>  end;

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

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

> finally;

> end;

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

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

> else begin

>  {если ошибок не было, то выводим окно об успешном окончании копирования}

>  ShowMessage('Успешно скопировано!');


Рекомендуем почитать
Изучаем Java EE 7

Java Enterprise Edition (Java EE) остается одной из ведущих технологий и платформ на основе Java. Данная книга представляет собой логичное пошаговое руководство, в котором подробно описаны многие спецификации и эталонные реализации Java EE 7. Работа с ними продемонстрирована на практических примерах. В этом фундаментальном издании также используется новейшая версия инструмента GlassFish, предназначенного для развертывания и администрирования примеров кода. Книга написана ведущим специалистом по обработке запросов на спецификацию Java EE, членом наблюдательного совета организации Java Community Process (JCP)


MFC и OpenGL

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Как функции, не являющиеся методами, улучшают инкапсуляцию

Когда приходится инкапсулировать, то иногда лучше меньше, чем большеЯ начну со следующего утверждения: Если вы пишете функцию, которая может быть выполнена или как метод класса, или быть внешней по отношению к классу, Вы должны предпочесть ее реализацию без использования метода. Такое решение увеличивает инкапсуляцию класса. Когда Вы думаете об использовании инкапсуляции, Вы должны думать том, чтобы не использовать методы.Удивлены? Читайте дальше.


Обработка событий в С++

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Программное обеспечение встроенных систем. Общие требования к разработке и документированию

Embedded system software. General requirements for development and documentationСтандарт подготовлен в развитие ГОСТ Р ИСО/МЭК 12207-99 «Информационная технология. Процессы жизненного цикла программных средств» с целью учета специфики разработки и документирования программного обеспечения встроенных систем реального времени.


Как пасти котов. Наставление для программистов, руководящих другими программистами

«Как пасти котов» – это книга о лидерстве и руководстве, о том, как первое совмещать со вторым. Это, если хотите, словарь трудных случаев управления IT-проектами. Программист подобен кошке, которая гуляет сама по себе. Так уж исторически сложилось. Именно поэтому так непросто быть руководителем команды разработчиков. Даже если вы еще месяц назад были блестящим и дисциплинированным программистом и вдруг оказались в роли менеджера, вряд ли вы знаете, с чего надо начать, какой выбрать стиль руководства, как нанимать и увольнять сотрудников, проводить совещания, добиваться своевременного выполнения задач.