| СОПРЯЖЕНИЕ КОМПЬЮТЕРОВ С ВНЕШНИМИ УСТРОЙСТВАМИ |
|
Примеры программирования: Работа с файлами.
В качестве следующего примера программирования КПК я хотел бы предложить программу - текстовый редактор. Что она будет уметь делать:
Давайте рассмотрим внутренне устройство этой программы. Это обычное диалоговое приложение на котором размещены два 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 то все было в порядке и он сохранялся в одной директории с программой. Аналогичная ситуация и с открытием файла. © Иванов Дмитрий |
| Контакты | | | Гостевая книга |
| © 2005-2010 сопряжение компьютеров с внешними устройствами PCPORTS.RU © Иванов Д.В. | ||||||||||||||