О последних двух переменных следует сказать особо. Используемый файл, например 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г.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.