Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Лекция 8.






Работа с файлами.

В современном программировании практически не встречаются приложения, которые не сохраняют какие-нибудь постоянные или временные данные на диск, в базу данных или в реестр. Таким образом, уметь работать с файлами важно для любого уважающего себя программиста. В данной лекции мы рассмотрим классы для работы с дисковыми файлами: класс CFile и класс, производный от него, CStdioFile. В процессе изучения вы найдете множество моментов, схожих с использованием библиотеки fstream.h в Windows Console Application. Создаем новое приложение MFC (рис. 1) с названием Project8.

Рис. 1.

 

Выбираем тип приложения – на основе диалоговых окон (рис. 2), и нажимаем на кнопку Готово.

 

Рис. 2.

Наше приложение будет представлять собой текстовый редактор. В редакторе ресурсов на диалоговом окне следует разместить несколько кнопок – New (создание нового тактового документа), Open (открытие существующего документа), Save (сохранение документа на диск), Cut (вырезать текст и поместить его в буфер обмена), Copy (копировать текст и поместить его в буфер обмена), Paste (вставить текст из буфера обмена). Чтобы изменить надпись на кнопке необходимо ее выделить одинарным нажатием левой кнопки мыши, затем вызвать контекстное меню одинарным нажатием правой кнопки мыши, и в выпадающем контекстном меню выбрать пункт Свойства. В правой части экрана отобразится панель свойств элемента управления, в которой необходимо отредактировать поле Подпись. Также на диалоговом окне следует разместить элемент Edit Control. У элемента Edit Control свойство Многострочный следует установить в true. Также следует установить в true свойство Требуется возврат, иначе при нажатии на клавишу Enter произойдет закрытие приложения. На рис. 3 представлен примерный вид окна приложения.

 

Рис. 3.

С помощью мастера классов связываем переменную с элементом управления Edit Control, как показано на рис. 4. В этой программе мы будем использовать сразу 2 переменные разных типов. Первая переменная m_edit – это управляющая переменная (категория Control) – объект класса CEdit, который содержит методы для работы элементом управления. Эту переменную мы будем использовать для работы с буфером обмена. А переменная m_text категорииValue будет использоваться для получения значения из элемента управления в виде текстовой строки (объект класса CString) и записи в файл, и наоборот. Подробно о том, какие методы есть у класса CEdit, а также подробное описание методов, можно прочитать по ссылке: https://msdn.microsoft.com/ru-ru/library/f7yhsd2b.aspx

 

Рис. 4.

 

Создаем обработчик нажатия на кнопку Save (Сохранить файл). Текст программы представлен ниже.

 

void CProject8Dlg:: OnBnClickedButton3()

{

// TODO: добавьте свой код обработчика уведомлений

CFileDialog fd(false, _T(".txt"), _T(" Noname.txt"), OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, _T(" Text Files (*.txt)|*.txt||"));

if(fd.DoModal()! =IDOK) return; // если пользователь не нажал ОК в диалоге сохранения файла, то выходим из функции

UpdateData(true); // в переменную m_text переносится текст из Edit Control

CStdioFile file; // создаем объект для работы с файлом

BOOL result; // объявляем переменную логического типа

// если файл успешно будет создан и открыт то в переменной result будет значение true

result=file.Open(fd.GetPathName(), CFile:: modeWrite | CFile:: modeCreate); // создаем и открываем файл

if(result==false){ // если файл не создан выдаем сообщение об ошибке и выходим из функции

MessageBox(_T(" Error create file! "), _T(" Warning"), MB_OK | MB_ICONERROR);

return;

}

file.WriteString(m_text); // записываем текст в файл

file.Close(); // закрываем файл

}

 

Создаем обработчик нажатия на кнопку Open (Открыть файл). Текст программы представлен ниже.

 

void CProject8Dlg:: OnBnClickedButton2()

{

CFileDialog fd(true); //создание объекта диалога открытия файла

if(fd.DoModal()! =IDOK) return; // если пользователь не нажал ОК в диалоге открытия файла, то выходим из функции

 

CStdioFile file; // создаем объект для работы с файлом

BOOL result; // объявляем переменную логического типа

// если файл успешно будет открыт, то в переменной result будет значение true

result=file.Open(fd.GetPathName(), CFile:: modeRead); // открываем файл

if(result==false){

// если файл не удалось открыть, то выдаем сообщение об ошибке и выходим из функции

MessageBox(_T(" Error create file! "), _T(" Warning"), MB_OK | MB_ICONERROR);

return;

}

CString buff;

m_text=_T(" ");

while(file.ReadString(buff)) // считываем текст построчно из файла в переменную buff

{ // цикл продолжает выполняться пока из файла не будут прочитаны все строки

m_text=m_text+buff+_T(" \n"); // к предыдущим считанным строкам добавляем вновь считанную

}

file.Close(); // закрываем файл

UpdateData(false); // в Edit Control переносится текст из переменной m_text

}

 

 

Создаем обработчик нажатия на кнопку New (Новый документ). Текст программы представлен ниже.

 

void CProject8Dlg:: OnBnClickedButton1()

{

// TODO: добавьте свой код обработчика уведомлений

if(m_edit.GetModify()) // если текст был изменен то GetModify() вернет true

{

//спрашиваем у пользователя хочет ли он сохранить файл, и если нажата кнопка YES

if(MessageBox(_T(" Do you want to save file? "), _T(" What the heck! "), MB_YESNO | MB_ICONQUESTION)==IDYES)

{

OnBnClickedButton3(); // то вызываем функцию-обработчик нажатия на кнопку Save

}

}

m_text=_T(" "); // очищаем текстовую переменную

UpdateData(false); // выводим пустую строку в Edit Control

}

 

В этой функции демонстрируется использование двух подходов для обращения к элементу управления Edit Control. Управляющую переменную m_edit мы используем для проверки состояния элемента управления, а именно, был ли изменен в нем текст. А переменную m_text, связанную по значению, мы используем для обновления данных (в этом случае очистки) поля Edit Control. В общем, такая возможность – это офигенчик.

 

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

https://msdn.microsoft.com/ru-ru/library/dk77e5e7.aspx

Также прочитать про класс CFileDialog можно тут: https://www.firststeps.ru/mfc/steps/help/r.php? 954

https://www.firststeps.ru/mfc/steps/help/r.php? 959

 

Рассмотрим, как работать с буфером обмена. Класс CEdit уже содержит методы для работы с буфером обмена. Поэтому нам необходимо только в обработчиках нажатия на кнопки вызвать соответствующие методы. Текст программы представлен ниже.

 

void CProject8Dlg:: OnBnClickedButton4() // обработчик нажатия на кнопку Cut

{

// TODO: добавьте свой код обработчика уведомлений

m_edit.Cut();

}

 

 

void CProject8Dlg:: OnBnClickedButton5()// обработчик нажатия на кнопку Copy

{

// TODO: добавьте свой код обработчика уведомлений

m_edit.Copy();

}

 

 

void CProject8Dlg:: OnBnClickedButton6()// обработчик нажатия на кнопку Paste

{

// TODO: добавьте свой код обработчика уведомлений

m_edit.Paste();

}

 

Можно откомпилировать программу и проверить ее работу. Это готовый текстовый редактор.

 

 






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.