Когда пользователь нажимает кнопку “Записать и прочесть файл”, программа записывает верхнюю строку в файл data.dat, затем считывает ее из файла и выводит в нижнем текстовом поле

 

1. Выделим место для хранения данных, определив 2 обьекта типа данных char в классе CFilerDlg:

· OutString[4][20] – для хранения строки “Учимся работать с файлами” в разделенном на 4 записи виде, по 20 символов в каждой –мы это делаем для рассмотрения приемов работы с файловым указателем;

· InString [20] – для временного хранения считываемых из файла записей;

 

 

2. При помощи ClassWizard-а свяжите переменную m_text1 с верхним текстовым полем, а переменную m_text2 - с нижним.

3. Организуем инициализацию нашего символьного масива OutString[][] строкой “Учимся работать с файлами”, и его вывод в верхнее текстовое поле. Для этого добавте ниже преведенные строки в метод InitDialog() главного окна приложения:

 

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

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

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

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

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

UpdateData(FALSE);

 

4. Перед тем как начать работу с файлами давайте рассмотрим класс CFile:

 

 

Методы
CFile Конструирует обьект класса CFile по заданному пути или файловому логическому номеру
Abort Закрывает файл, игнорируя любые предупреждения и ошибки
Open Производит безопасное открытие файла с возможностью проверки ошибок
Close Закрывает файл и удаляет обьект
Read Читает данные из файла с текущего места
ReadHuge Может прочитать из файла более 64К данных, начиная с текущей позиции. В 32-разрядном программировании не отличается от Read()
Write Записывает данные в файл с текущей позиции
WriteHuge Может записать в файл более 64К данных, начиная с текущей позиции. В 32-разрядном программировании не отличается от Write()
Flush Выполняет отложенную запись всех данных
Seek Перемещает файловый указатель в заданную позицию
SeekToBegin Перемещает файловый указатель в начало файла
SeekToEnd Перемещает файловый указатель в конец файла
GetLength Получает длину файла
SetLength Изменяет длину файла
LockRange Блокирует диапазон байтов в файле
UnlockRange Снимает блокировку диапазона байтов в файле
GetPosition Получает текущую позицию файлового указателя
GetStatus Получает сведения о статусе заданного файла
SetStatus Задает статус файла
GetFileName Получает имя заданного файла
GetFileTitle Получает короткое имя заданного файла
GetFilePath Получает полный файловый путь заданного файла
SetFilePath Задает полный файловый путь заданного файла
Rename Переименовывает заданный файл
Remove Удаляет заданный файл
Режимы открытия файла
CFile::modeCreate Создает новый файл
CFile::modeNoInherit Запрещает наследование файла дочерними процессами
CFile::modeNoTruncate Комбинируется с modeCreate – если создаваемый файл уже существует, он не обрезается до нулевой длины
CFile::modeRead Открывает файл только для чтения
CFile::modeReadWrite Открывает файл для чтения/записи
CFile::modeWrite Открывает файл только для записи
CFile::shareCompat Отсутствует в 32-разрядной версии MFC. При использовании в CFile::Open соответствует CFile::shareExclusive
CFile::shareDenyNone Открывает файл, не запрещая другим процессам чтение/ запись
CFile::shareDenyRead Открывает файл, запрещая другим процессам чтение из него
CFile::shareDenyWrite Открывает файл, запрещая другим процессам запись в него
CFile::shareExclusive Открывает файл в многопольном режиме, запрещая другим процессам чтение/ запись
CFile::typeBinary Устанавливает двоичный режим
CFile::typeText Устанавливает текстовый режим со специальной обработкой пар символов конца/перевода строки

 

Теперь при помощи ClassWizard-а создадим обработчик нажатия кнопки “Записать и прочесть файл”, затем в созданный метод добавим код который сохраняет и загружает символьные строки:

 

void CFilerDlg::OnButton1 ()

{

//Открытие(создание) файла data.dat для записи символьных строк

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

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

//Сохранение символьной строки, где loop_index – номер строки в массиве,

//а число 20 – количество сохраняемых символов

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

//Закрытие файла

OutFile.Close();

//Открытие файла data.dat для чтения символьных строк

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

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

{

//Установка позиции файлового указателя для считывания необходимой строки

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

//Чтение из файла 20-ти символов(байт) в массив InString

InFile.Read(InString,20);

//Перенос содержимого записи во второе текстовое поле

m_text2+=CString(InString);

};

UpdateData(FALSE);

//Закрытие файла

InFile.Close();

}

 

Программа готова к работе. Запускайте!

 

Нажмите кнопку “Записать и прочесть файл”. Текст отображенный в верхнем текстовом поле записывается в файл data.dat, а затем считывается и выводится в нижнем текстовом поле, как показано на рисунке



php"; ?>