Студопедия

КАТЕГОРИИ:

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

Инициализация данных программы filer




Теперь необходимо поместить строки в четыре символьных массива. Для заполнения символьных массивов в методеOnInitDialog()мы воспользуемся стандартной функцией языка С strcpy():

BOOL CFilerDlg::OnInitDialog()

{

CDialog::OnInitDialog(),

 strcpy(OutString[0], "Учимся ");

 strcpy(OutString[1], "работать ");

strcpy(OutString[2], "c ");

strcpy(0utString[3], "файлами ");

}

Затем добавьте в главное диалоговое окно необходимые управляющие элементы — два текстовых поля и кнопку.

Для кнопки будет coздaнметод обработки. Kpoме тoro, свяжите переменную m_text1с верхним текстовым полем, а переменную m_text2 - с нижним. Сохраненная на диске строка заносится в верхнее диалоговое поле в следующем фрагменте метода OnInitDialog:

BOOL CFilerDlg::OnInitDialog()

 {

CDialog::OnInitDialog();

strcpy(OutString[0]. "Учимся ");

strcpy(0utString[1], "работать ");

strcpy(0utString[2], "с ");

strcpy(0utString[3]. "файлами ");

m_text1 = CString(OutSring[0]) + CString(OutString[1]) +CString(OutString[2]) + CString(OutString[3]);

UpdateData(false);

}

Когда пользователь нажимает кнопку Прочесть и записать файл, наша программа должна записать строку в файл. Давайте посмотрим, как это делается.

Запись в файл

Для того, чтобы записать на диск четыре элемента символьного массива, с OutString[0] по OutString[3], мы воспользуемся классом CFileи создадим в обработчике сообщения о нажатии кнопки OnButton1() объект OutFileкласса CFile:

void CFilerDlg::OnButton1()

{

 CFile OutFile("data.dat", CFile::modeCreate | CFile::modeWrite);

}

Методы класса CFile перечислены в табл.10.1.

Таблица 10.1. Методы класса CFile

Метод Назначение
Abort Закрывает файл, игнорируя любые предупреждения и ошибки
Cfile Конструирует объект класса CFile по заданному пути или файловому логическому номеру
Close Закрывает файл и удаляет объект
Flush Выполняет отложенную запись всех данных
GetFileName Получает имя заданного файла
GetFilePath Получает полный файловый путь заданного файла
GetFileTitle Получает короткое имя заданного файла
GetLength Получает длину файла
GetPosition Получает текущую позицию файлового указателя
GetStatus Получает сведения о статусе заданного файла (статическая, виртуальная функция)
GetStatus Получает сведения о статусе открытого файла
LockRange Блокирует диапазон байтов в файле
Open Производит безопасное открытие файла с возможностью проверки ошибок
Read Читает данные из файла с текущей позиции
ReadHuge Может прочитать из файла более 64К данных, начиная с текущей позиции. В 32-разрядном программировании не отличается от Read()
Remove Удаляет заданный файл
Rename Переименовывает заданный файл
Seek Перемещает файловый указатель в заданную позицию
SeekToBegin Перемещает файловый указатель в начало файла
SeekToEnd Перемещает файловый указатель в конец файла
SetFilePath Задает полный путь файла
SetLength Изменяет длину файла
SetStatus Задает статус файла
UnlockRange Снимает блокировку с диапазона байтов в файле \
Write Записывает данные в файл с текущей позиции
WriteHuge Может записать в файл более 64К данных, начиная с текущей позиции. В 32-разрядном программировании не отличается от Write()

 

Первая строка приведенного выше фрагмента создает файл data.dat и открывает его для записи. Обратите внимание на константы, передаваемые конструктором CFile: CFile::modeCreate | CFile::modeWrite. ПрефиксCFile::означает, что константы принадлежат классу CFile. Они, как и прочие константы в конструкторе CFile, могут объединяться оператором Visual C++. Передавая конструктору константы CFile::modeCreate | CFile::modeWrite мы сообщаем классу CFile о своем желании создать новый файл и открыть его. Список констант, определяющих режим открытия файла в конструкторе CFile , приведен в табл. 10.2.

Таблица 10.2

Константа Назначение
CFile::modeCreated Создает новый файл
CFile::modeNoTruncated Комбинируется с  - если создаваемый файл уже существует, он не обрезается до нулевой длины.
CFile::modeRead Открывает файл только для чтения
CFile::modeReadWrite Открывает файл для чтения и записи
CFile::modeWrite Открывает файл только для записи
CFile::typeBinary Устанавливает двоичный режим
CFile::typeText Устанавливает текстовый режим со специальной обработкой пар символов конца/перевода строки

 

Файл открыт и готов к записи. Мы воспользуемся оператором цикла, в котором запишем в него четыре символьных строки с помощью метода Write() класса CFile:

void CFilerDIg::OnButton1()

{

   CFile OutFile("data.dat", CFile: :modeCreate | CFile: :modeWrite);

        for(int loop_index = 0; loop_index < 4; loop_index++){

                         OutFile.Write(OutString[loop_index], 20);

            }

        OutFile.Close();

}

При таком подходе каждая строка интерпретируется как отдельная запись, а разбиение данных на записи облегчает доступ. В конце приведенного выше фрагмента мы закрываем файл методом Close () класса CFile.

На этом процесс записи завершен — на диске появляется созданный и заполненный файл data.dat. Теперь необходимо прочитать его содержимое в программе.

Чтение файла

Для чтения символьных строк из файла data.dat мы воспользуемся методом Read( )класса CFile. Начнем с открытия файла и создания нового объекта InFileкласса CFile, который открывается в режиме чтения:

void CFilerDIg::OnButton1()

{

   CFile OutFile("data.dat", CFile: :modeCreate | CFile: :modeWrite);

        for(int loop_index = 0; loop_index < 4; loop_index++){

                         OutFile.Write(OutString[loop_index], 20);

            }

        OutFile.Close();

 CFile InFile("data.dat", CFile::modeRead);

}   

Далее мы перебираем в цикле четыре символьные строки файла. Длина каждой из них равна 20 символам, поэтому мы можем воспользоваться методом Seek() классаCFile для установки файлового указателя в начало каждой последующей строки:

void CFilerDlg::OnButton1()

{

   CFile OutFile("data.dat", CFile: :modeCreate | CFile: :modeWrite);

        for(int loop_index = 0; loop_index < 4; loop_index++){

                         OutFile.Write(OutString[loop_index], 20);

            }

        OutFile.Close();

 CFile InFile("data.dat", CFile::modeRead);

for(loop_index == 0; loop_.index < 4; loop_index++){      

            InFile.Seek(20 * loop_index. CFile::begin); 

}

}










Последнее изменение этой страницы: 2018-04-12; просмотров: 336.

stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда...