Ввод/вывод записей при работе с файлами с использованием MFC (Лабораторная работа № 19 по VisualC++ 2005), страница 2

8) Теперь необходимо создать обработчик для кнопки «Занесення в файл». В программе она автоматически получила символическое имя IDC_BUTTON1. Как обычно, в диалоговом окне нужно выделить кнопку, вызвать контекстное меню и в нем- Add Event Handler. В появившемся окне по умолчанию в Message type выбрано сообщение BN_CLICKED, в Class List- Crabfile1Dlg, а в Function handler name- имя обработчика. Остается щелкнуть по кнопке Add and Edit. В результате в файле Crabfile1Dlg.cpp появится заготовка для обработчика события- щелчка на кнопке «Занесення в файл». После её заполнения получим функцию- обработчик, приведенную ниже.

void Crabfile1Dlg::OnBnClickedButton1()

{

CFile to_file("f1.dat",CFile::modeCreate|CFile::modeWrite);

for(int i=0;i<4;i++)

{

    to_file.Seek(i*80,CFile::begin);

    to_file.Write(OutString[i],80);

}

m_edit1.SetWindowTextA("Занесення відбулося");

    // TODO: Add your control notification handler code here

to_file.Close();// Не обов’язково

}

    Сначала создается объект to_file класса CFile. Запрограммировано создание (CFile::modeCreate)файла f1.dat для записи в него(CFile::modeWrite).

    В цикле сначала указатель позиции файла устанавливается в позицию i*80 от его начала (CFile::begin). Затем происходит запись в OutString[i] строки длиной 80 символов.После записи четырех строк в текстовое окно, представленное элементом данных m_edit1, заносится сообщение «Занесення відбулося».

9) Cоздать обработчик для кнопки «Виведення із файлу». В программе она автоматически получила символическое имя IDC_BUTTON2. Проделав действия, приведенные в предыдущем пункте, получим заготовку для обработчика. После внесения в неё необходимых операторов функция имеет вид:

void Crabfile1Dlg::OnBnClickedButton2()

{

    CFile from_file("f1.dat",CFile::modeRead);

    for(int i=0;i<4;i++)

    {

        from_file.Seek(i*80,CFile::begin);

        from_file.Read(InString,80);

        m_list1.AddString(InString);

    }

    // TODO: Add your control notification handler code here

}

    Создается объект from_file класса CFile. При этом существующий(а значит не нужно писать CFile::modeCreate) файл f1.dat переводится в режим только для чтения(CFile::modeRead).

    В цикле указатель позиции файла сначала устанавливается в позицию i*80 от его начала.Затем происходит чтение из файла в массив InString строки длиной 80 символов.После чего строка заносится в окно списка, представленного элементом данных m_list1.

    Первая программа составлена и её можно запустить, нажав Ctrl+F5.

3 Последовательность действий при создании второй программы

1) Выполнить описанные выше пункты 1-3 для создания диалогового окна проекта, названного rabfile2. В нем разместить три текстовых окна. Одно- для предварительного ввода количества заносимых в файл строк (ввести подпись «Введіть кількість рядків і натисніть кнопку  «Start»»), второе- для последовательного ввода символьных строк (подписать «Вікно для введення даних») и третье- для  отображения текущего номера вводимой строки. Кроме того, ввести окно списка для отображения выведенных из файла строк, а также три кнопки: «Start», «Занесення у файл», «Виведення із файлу».

2) В  класс Crabfile2Dlg добавить элементы данных с именами m_edit1, m_edit2 и m_edit3, соответствующие текстовым окнам, а также m_list1, соответствующий окну списка.

3) Выбрать вкладку Class View, выделить  Crabfile2Dlg, вызвать контекстное меню, Add/Add Variable и добавить ряд переменных с доступом private:

   char OutString[40][80] - строки, заносимые в файл;

   char InString[80] - строка, в которую будет последовательно осуществляться считывание из файла;

   int kil_poliv – количество записей (не больше 40) (при работе со структурами это кол-во её полей);

   int nomer- номер записи при занесении в файл;

   to_file и from_file типа CFile.