Когда пользователь нажимает кнопку “Записать и прочесть файл”, программа записывает верхнюю строку в файл 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, а затем считывается и выводится в нижнем текстовом поле, как показано на рисунке