СОПРЯЖЕНИЕ КОМПЬЮТЕРОВ С ВНЕШНИМИ УСТРОЙСТВАМИ

Яндекс цитирования

Друзья ресурса:

www.roboforum.ru



Примеры программирования: Работа с файлами.

файлы к статье (размер: 83.2 КБ)

В качестве следующего примера программирования КПК я хотел бы предложить программу - текстовый редактор. Что она будет уметь делать:

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

Конечно, такая функциональность мало похожа даже на привычный нам "Блокнот" но для начала вполне неплохо. Проект приложения находится в файлах к этой статье.

Давайте рассмотрим внутренне устройство этой программы. Это обычное диалоговое приложение на котором размещены два Edit-окна и две кнопки. Верхнее Edit-окно предназначенно для ввода пути и имени файла который нужно будет открыть или сохранить. Во воторм окне отображается содержимое файла, которое можно редактировать. Для этого окна заданы дополнительные настройки, позволяющие ему работать в многострочном режиме:

Для этих окон созданы две переменные для работы с ними. m_text для окна редактирования содержимого файла и m_fname для имени файла. Они задаются через меню View->ClassWizard:

Рассмотрим обработчик нажатия кнопки Open. Снача с помощью вызова функции UpdateData() мы помещаем из Edit-окон их содержимое в ассоциированные сними переменные, а именно в m_text и m_fname. Далее пытаемся открыть указанный в m_fname файл. Если это нам удается, то считываем содержимое файла по одному символу и помещаем результат чтения в окно редактирования.

void CTextEditorDlg::OnOpen() 
{
	// TODO: Add your control notification ...
	UpdateData(true);
	
	CFile fp;
	bool b = fp.Open(m_fname, CFile::modeRead|CFile::typeText);   
	if(b!=0)
	{
		CString s;
		char buffer;
		DWORD dwRead; 

		 do
		 {
			dwRead = fp.Read(&buffer, 1);
			s+=buffer;
			m_text=s;
			UpdateData(false);
			 
		 }
		 while (dwRead > 0);
		 fp.Close();
	}
	else
	{		
		MessageBox(_T("Cant open file"), _T("Error"), 
					MB_ICONERROR);
	}	
	
}

Обработчик кнопки Save очень поход на предыдущий. Здесь опять пытаемся открыть файл и если результат "положительный", то записываем в этот файл по одному символу из текста, введенного во вотрое коно редактирования.

void CTextEditorDlg::OnSave() 
{
	// TODO: Add your control notification ...
	UpdateData(true);
	
	CFile fp;
	bool b = fp.Open(m_fname, CFile::modeCreate|
				CFile::modeWrite|CFile::typeText);   
	if(b!=0)
	{		
		PTCHAR t=m_text.GetBuffer(1024);
		for(int i=0; i<m_text.GetLength(); i++)
		 fp.Write(&t[i], 1);
	
		m_text.ReleaseBuffer();
		fp.Close();
	}
	else
	{		
		MessageBox(_T("Cant open/save file"), 
				_T("Error"), MB_ICONERROR);
	}	
	
}

Следует обратить внимание на некотрую особенность работы с данной программой на КПК. Проблема состоит в том, что для работы с файлами требовалось задавать полный путь для доступа к файлу. В моем КПК корневой папкой является My Device. Программа находилась во вложенной папке (на ступеньку ниже) My Documents. Если при этом попытаться сохранить файл, введя в соответствующее поле имя, например myfile.txt то он сохранялся в директории My Device / myfile.txt а если явно указать путь и задать в качестве имени My Documents / myfile.txt то все было в порядке и он сохранялся в одной директории с программой. Аналогичная ситуация и с открытием файла.


© Иванов Дмитрий
20 декабря 2008 года
www.pcports.ru




Контакты | Гостевая книга

© 2005-2010 сопряжение компьютеров с внешними устройствами PCPORTS.RU © Иванов Д.В.