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

   О последних двух переменных следует сказать особо. Используемый файл, например f1.dat, нельзя открывать в обработчике нажатия кнопки «Занесення у файл», иначе при каждом занесении в файл он будет очищаться. Поэтому лучше это сделать при нажатии кнопки «Start». Однако используется файл в обработчиках кнопок «Занесення у файл», «Виведення із файлу». А это значит, что переменная типа CFile не может быть локальной. Поэтому to_file и from_file добавлены в класс Crabfile2Dlg в качестве элементов данных, а непосредственно используемый файл будет открыт в обработчике кнопки «Start» Crabfile2Dlg с помощью функции open(). В принципе можно было бы обойтись одной переменной типа CFile, но наличие двух идентификаторов (to_file, from_file) облегчает восприятие кода программы.

3) Создать обработчик для кнопки «Start».

   В нем предусмотреть открытие файла, обнуление номера заносимой в файл записи (nomer=0) и прочтение из текстового окна (элемент данных m_edit1) предварительно записанного  в него количества записей (kil_poliv). Ниже приводится его код.

void Crabfile2Dlg::OnBnClickedButton1()

{

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

    nomer=0;

    CString s;

    m_edit1.GetWindowTextA(s);

    kil_poliv=atoi(s);

        // TODO: Add your control notification handler code here

}

    С помощью объекта to_edit вызван метод Open() класса CFile. Создан файл f1.dat для записи в него.Из текстового окна, которому соответствует элемент данных m_edit1,считывается строка символов (количество записей), которая преобразуется в число kil_poliv.

4) Создать обработчик для кнопки «Занесення у файл».

void Crabfile2Dlg::OnBnClickedButton2()

{

    CString s;

    m_edit2.GetWindowTextA(s);

    strcpy_s(OutString[nomer],s);

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

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

        char str[10];

        _gcvt(nomer+1,3,str);

        m_edit3.SetWindowTextA(str);

        m_edit2.SetWindowTextA("");

    nomer++;

    if(nomer>=kil_poliv)

    {

        nomer=0;

    m_edit2.SetWindowTextA("Занесення закінчилося");

    to_file.Close();

    }

    // TODO: Add your control notification handler code here

}

    Из текстового окна, которому соответствует элемент данных m_edit2,считывается строка символов, которая копируется в массив OutString[nomer]. Указатель позиции файла устанавливается в позицию nomer*80 от его начала, после чего OutString[nomer] заносится в файл. Увеличенный на единицу номер записи для удобства пользователя с помощью функции _gcvt()преобразуется в строку символов и выводится в третье текстовое окошко (m_edit3).Во второе текстовое окно заносится пробел для его очистки. После того, как будут введены все строки, обнуляется номер записи и во второе окно выводится сообщение "Занесення закінчилося".

5) Создать обработчик для кнопки «Виведення із файлу».

void Crabfile2Dlg::OnBnClickedButton3()

{

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

    CString s;

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

    {

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

        from_file.Read(InString,80);

        //strcpy(s,InString);

        m_list1.AddString(InString);

    }

    // TODO: Add your control notification handler code here

}

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

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

3 Контрольные вопросы

1 Как создать диалоговое окно?

2Как создать файл и выбрать его режим работы?

3 Как осуществить инициализацию строк ?

4 Как занести в файл инициализированные строки?

5 Как прочитать из файла последовательность строк?

6 Каким образом можно обеспечить занесение в файл произвольного количества символьных строк?

7 Как осуществляется чтение/запись строки символов при работе с текстовым окном?

8 Как отключить сортировку символьных строк в окне списка?

Список литературы

1 Айвор Хортон  VISUAL C++ 2005 Базовый курс, «Диалектика», Москва*Санкт-Петербург*Киев , 2007г.

2 Сергеев А.П., Терен А.Н. Программирование в VISUAL C++ 2005 «Диалектика», Москва*Санкт-Петербург*Киев , 2006г.