Студопедия

КАТЕГОРИИ:

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

Обработка текстовых файлов (MVS 6.0)




Приведенный ниже текст программы написан для MVS 6.0.

 

 

После обработки текстовый файл можно закрыть с помощью функции close(), например, MyFile.close().




Обработка текстовых файлов (MVS 2005)

Приведенный ниже текст программы написан для MVS 2005. Проект TextFileStreamU разработан для набора символов Unicode. По сути, он практически ничем не отличается от проекта, построенного в среде MVS 6.0.

 

 

 

 

 

В результате выполнения функции WriteTextFile будет создан текстовый файл с такими двумя записями:






Верблюд 456.7 0

Слон 56.7 1

 

Разделителями полей записей файла служат пробелы.

В результате выполнения функции ReadTextFile на монитор будут выведены следующие данные (если будет прочитан файл, записанный функцией WriteTextFile):

Верблюд          456.70 не летает

Слон                    56.70 летает

 

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

 

 


Обработка двоичных файлов

Проект FileProcessDemo, файл FileProcessDemo.cpp. Консольное приложение с поддержкой MFC.

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

При записи и чтении двоичного файла данные (любого типа) записываются в него и читаются оттуда без всяких преобразований, «как есть». Таким образом, двоичный файл представляет собой просто последовательность байт, без какого бы ни было разделения на записи или признаков концов записей, как в текстовом файле. Для того чтобы при чтении файла можно было корректно интерпретировать данные, надо в точности знать, как эти данные были записаны. В приведенной ниже программе в файл записываются экземпляры структуры SomeStruct и они же читаются. Запись данных в файл выполняется с помощью метода Write()  класса CFile таким образом:

file.Write(&myStr,sizeof(myStr));

 

Первый параметр метода должен содержать адрес начала области, в которой расположены данные, а второй параметр – объем записываемых данных в байтах.

Обратите внимание: в консольном приложении можно вызывать функцию AfxMessageBox(), которая показывает традиционное окно Windows с текстовым сообщением.

 

#include "stdafx.h"

#include "FileProcessDemo.h"

#include <Conio.h>

// стандартные директивы препроцессора опускаем

     

CWinApp theApp;

 

using namespace std;

/* описываем некоторую структуру SomeStruct, экземпляры которой будут храниться в файле в двоичном формате

*/

 

struct SomeStruct{int Number; double Time,XCoor,YCoor;};

 

/* Функция CreateAndWriteBinaryFile() предназначена для создания двоичного файла. В ней в файл записываются 10 экземпляров структуры SomeStruct

*/

void CreateAndWriteBinaryFile()

{

SomeStruct myStr;

/* Имя создаваемого файла получаем с помощью стандартного диалога

CFileDialog по сохранению файла (FALSE - сохранение, TRUE - открытие)

*/

 

CFileDialog dlg(FALSE,"dat","*.dat");

// OPENFILENAME opfn;

if(dlg.DoModal()==IDOK)

{

   /* Файл будем обрабатывать с помощью класса CFile библиотеки

MFC. Параметры конструктора класса CFile - имя файла и режим открытия файла

   */

   CFile file(dlg.GetPathName(),

              CFile::modeCreate | CFile::modeWrite);

   /* В следующем цикле в файл записываются 10 экземпяров

структуры, значения компонент которой формируются по

очевидному алгоритму. Операторы try и catch предназначены для

обработки исключительных ситуаций (ошибок), которые

могут возникнуть при записи файла 

   */

   for(int i=0;i<10;i++)

   {

         myStr.Number=i; myStr.Time=i*10;

   myStr.XCoor=100+i; myStr.YCoor=200+i;

         try

         {

         file.Write(&myStr,sizeof(myStr));

         }catch(CFileException)

         {

              AfxMessageBox("Ошибка при записи файла");

              break;

         }

   }

   file.Close();

}

}

/* Функция ReadBinaryFile() предназначена для чтения двоичного файла,

созданного с помощью функции CreateAndWriteBinaryFile().

Прочитанные данные - 10 экземпляров структуры SomeStruct - эта

ф-я выводит на монитор просто для контроля

*/

 

void ReadBinaryFile()

{

SomeStruct myStr;

CFileDialog dlg(TRUE,"dat","*.dat");

if(dlg.DoModal()==IDOK)

{

   CFile file(dlg.GetPathName(),CFile::modeRead);

// CFile file; VERIFY(file.Open(dlg.GetPathName(),CFile::modeRead));

   int numRead;

   do

   {

         try

         {

         numRead=file.Read(&myStr,sizeof(myStr));

         if(numRead==sizeof(myStr))

         cout<<myStr.Number<<' '<<myStr.Time<<' '<<myStr.XCoor

              <<' '<<myStr.YCoor<<endl;

 

         }catch(CFileException)

         {

              AfxMessageBox("Ошибка при чтении файла");

              break;

         }

   }while(numRead==sizeof(myStr));

   file.Close();

}

}

 

int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])

{

int nRetCode = 0;

 

  // initialize MFC and print and error on failure

if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))

{

   // TODO: change error code to suit your needs

   cerr << _T("Fatal Error: MFC initialization failed") << endl;

   nRetCode = 1;

}

else

{

   CreateAndWriteBinaryFile();

   ReadBinaryFile();

   getch();

}

return nRetCode;

}

 










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

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