(Урок) Работа с файлами

(Урок) Работа с файлами

Тема в разделе "Темы со старого форума", создана пользователем Бэкап, 05.02.2015.

Загрузка...
Ответов: 0 Просмотров: 329 Ответить в теме
Воспользуйтесь функцией автоматического продвижения темы для увеличения числа просмотров темы, продаж платного контента и узнаваемости Вашего бренда. Услуга продвижения действует на протяжении 3-х дней и стоит всего 50 STF Wallet.

Продвинуть тему
  1. Бэкап
    Сейчас, мы будем разработать программу для работы с файлами. Программа должна предоставлять стандартные функции, используемые при работе с файлами: копирование, перенос, удаление.

    Создайте новый проект Delphi. Первым делом разработаем интерфейс программы. Изменим некоторые свойства главной формы. Прежде всего, присвойте соответствующее значение свойству Caption (заголовок формы) — например, Работа с файлами. Поскольку окно нашей программы должно всегда находиться поверх всех остальных окон, следует присвоить свойству FormStyle значение fsStayOnTop. Больше никаких свойств формы изменять не будем.

    Разместите в левом верхнем углу формы, один над другим два компонента Label (метка) категории Standard . Для верхней метки присвойте свойству Caption значение Что:, а для второй — Куда:. Рядом с метками разместите по одному компоненту Edit (поле ввода) категории Standard . Присвойте свойству Name (имя) верхнего поля значение from, а свойству Name нижнего — значение where. Свойствам from.Text и where.Text присвойте пути по умолчанию, например: c:\1.txt и d:\2.txt.

    Для того чтобы не утруждать пользователя копированием или ручным вводом путей размещения файлов, воспользуемся стандартными диалоговыми окнами открытия и сохранения файлов. Диалоговом окну открытия файла соответствует компонент OpenDialog категории Dialogs , а диалоговому окну сохранения — компонент SaveDialog той же категории. Разместим эти компоненты на форме. Для удобства изменим значение свойства OpenDialog1.Name на Open1, а значение свойства SaveDialog1.Name на Save1.

    Справа от полей from и where разместим кнопки вызова диалогового окна обзора (компоненты Button категории Standard ). Свойству Caption этих кнопок присвойте значение Обзор или просто поставьте точки. При желании, можете изменить размеры кнопок.

    Разместите на форме под полем where компонент Label категории Standard и присвойте его свойству Caption значение Размер файла:. Справа от этой метки разместите еще один компонент Label, очистив для нее свойство Caption — эта метка будет отображать размер обрабатываемого файла.

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

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

    Вы можете сделать интерфейс совсем по другому, но в данном примере я делаю так.

    Теперь будем писать сам код:
    Код:
    Для начала объявим нашу процедуру (назовем ее doit) как закрытый член класса формы:[/B][/B]
    [B][B]
    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;
    


    Эта процедура будет использоваться при копировании и переносе файлов. Сначала мы открываем файлы, которые выбрал пользователь, а затем проверяем, не было ли ошибок при их открытии. Если ошибок не было, то отображаем пользователю размер исходного файла и начинаем считывать байты из первого файла, записывая их во второй. Если копирование завершено и ошибок при этом не произошло, то отображаем сообщение об успешном окончании копирования.
    Процедура 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;
    Сначала мы удаляем файл, а затем проверяем, существует ли он на диске после выполнения операции удаления. Если его не существует, то выводим сообщение об успешном удалении файла. Теперь можно откомпилировать и запустить программу на выполнение.


    Скачать исходник (Unit1.txt): ТЫК
     
    05.02.2015 Сообщений: Симпатий:
В этой теме всего одна страница
Вам, как гостю, ограничены возможности взаимодействия с темами. Пройдите бесплатную регистрацию и откройте для себя море возможностей.