4873

Режимы работы с файлами. Чтение и запись в бинарном режиме

Лекция

Информатика, кибернетика и программирование

Режимы работы с файлами. Чтение и запись в бинарном режиме. Файлы с произвольным доступом. Позиционирование. При работе с файлом, открытым в текстовом режиме, происходит следующее...

Русский

2012-11-28

41.5 KB

10 чел.

Режимы работы с файлами. Чтение и запись в бинарном режиме. Файлы с произвольным доступом. Позиционирование.

При работе с файлом, открытым в текстовом режиме, происходит следующее:

  •  при вводе каждая пара символов '\r' + '\n' (возврат каретки + перевод строки) преобразуется в символ перевода строки ('\n');
  •  при выводе каждый символ перевода строки ('\n') преобразуется в пару '\r' +'\n' (возврат каретки + перевод строки).

Текстовые файлы предполагают, что их содержимое может быть прочитано человеком, поэтому, как правило, в текстовые файлы выводится информация в «удобочитаемом» виде, т.е. все данные явно преобразуются в некоторое строковое представление с использованием печатных символов.

Если же файл используется для вывода данных, предполагающих последующее использование их для ввода в программу (возможно, другую), строковое преобразование и лишние байты форматирования ни к чему. С этой целью система ввода-вывода предоставляет возможность осуществления неформатируемого ввода-вывода, то есть записи и чтения двоичной информации («сырых» данных – англ. raw data). Для осуществления ввода-вывода в двоичном режиме применятся флаг ios::binary в параметре open_mode, при создании соответствующего потока или использовании функции open(). Чтение двоичной информации из файла осуществляется функцией read(), которая имеет следующие прототипы:

istream & read( char* s, int n );

istream & read( unsigned char* s, int n );

Здесь параметр s задает буфер (временные массив-хранилище) для считывания данных, а параметр n – число читаемых символов.

Запись двоичных данных осуществляет функция-член write():

ostream & write( const char * s, int n );

ostream & write( const unsigned char * s, int n );

Эта функция получает n символов из буфера, адрес которого задан параметром s, и вставляет их в поток вывода. Рассмотрим пример.

#include <fstream>

#include <iostream>

using namespace std;

void main()

{

 int x = 255;

 char str[80] = "Использование двоичного ввода-вывода.";

 // Открываем файл для вывода в двоичном режиме

 ofstream ofs("test.dat");

 

if ( ! ofs )

 {

 cout << "Файл не открыт" << endl;

 return;

}

 

ofs.write( ( char * ) & x, sizeof( int ) );

ofs.write( ( char * ) & str, sizeof( str ) );

 ofs.close();

 

 // Открываем файл для ввода в двоичном режиме

 ifstream ifs("test.dat");

 if ( ! ifs )

 {

 cout << "Файл не открыт.\n";

 return;

}

 

ifs.read( ( char * ) & x, sizeof( int ) );

ifs.read( ( char * ) str, sizeof( str ) );

cout << x << '\n' << str << '\n';

}

Произвольный доступ в системе ввода-вывода реализуется с помощью функций seekg() и seekp(), используемых для позиционирования, соответственно, входного и выходного потока. Каждая из них имеет по два прототипа:

istream & seekg( long pos );

istream & seekg( long pos, seek_dir dir );

ostream & seekp( long offset );

ostream & seekp( long offset, seek_dir dir );

Здесь параметр pos задает абсолютную позицию в файле относительно начала файла. Параметр offset задает смещение в файле, а параметр dir – направление смещения, которое может принимать значения в соответствии с определением из класса ios:

ios::beg – смещение от начала файла, 
ios::cur – смещение относительно текущей позиции, 
ios::end – смещение от конца файла.

С каждым потоком связан указатель позиционирования, который изменяет свое значение в результате операции ввода или вывода. Для выполнения операций произвольного доступа файл должен открываться в двоичном режиме.

Получить текущее значение позиции в потоке ввода или вывода можно с помощью функций tellg() и tellp(), соответственно. Эти функции имеют прототипы:

long tellg();

 long tellp();

Следующий пример демонстрирует возможность позиционирования потока ввода информации:

#include <fstream>

#include <iostream>

using namespace std;

void main( int argc, char* argv[] )

{

 int size = 0;

 

 if (argc > 1)

 {

 const char * fileName = argv[1];

 ofstream of;

 of.open( fileName, ios::binary );

 

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

  of.put( (char)( i + 27 ) );

 

 of.close();

 

 ifstream file;

 file.open( fileName, ios::in | ios::binary );

 if ( file )

 {

  file.seekg( 0, ios::end );

  size = file.tellg();

  if ( size < 0 )

  {

   cerr << fileName << " не найден.";

   return;

  }

  cout << fileName << " size = " << size;    

 }

}

 else 

 cout << "Вы не задали имя файла.";

}


 

А также другие работы, которые могут Вас заинтересовать

83916. Н.И. Пирогов - вклад в развитие хирургии и топографической анатомии 46.6 KB
  Пирогов вклад в развитие хирургии и топографической анатомии. Пирогов основоположник топографической анатомии. Пирогов занял место профессора госпитальной хирургической клиники Медико хирургической академии СПб где с первых же дней стал читать знаменитый курс лекций по топографической анатомии он организовал анатомический институт в котором объединил практическую описательную и патологическую анатомию. Пирогов оформил все основные положения созданной им науки топографической анатомии в монументальном труде Полный курс анатомии...
83917. В.Н. Шевкуненко – создатель современного учения топографической анатомии на основе изменчивости 50.3 KB
  Геселевичем ввёл понятие типовой анатомии человека которая исследует распределение тканевых и системных масс в организме и расположение органов и частей тела с точки зрениях их развития. Типовая анатомия отмечает крайние типы строения и положения органов наблюдаемые у людей определённого телосложения. Шевкуненко исходными побуждающими моментами к таким исследованиям были: частое несоответствие формы и положения органов видимых во время операции с нормой описываемой в руководствах; несовершенство многих хирургических доступов при...
83918. Шовные материалы. Капрон, пролен, дексон, викрил и другие 50.37 KB
  Основные требования к шовному материалу: Биосовместимость отсутствие токсического аллергенного и тератогенного влияния шовной нити на ткани организма. Прочность нити и сохранение её свойств до образования рубца. Необходимо учитывать прочность нити в узле Атравматичность зависит от структуры и вида нити её манипуляционных свойств эластичности и гибкости. Понятие атравматичности включает несколько свойств присущих шовным материалам: Поверхностные свойства нити: кручёные и плетёные нити имеют шероховатую поверхность и при прохождении...
83919. Современные хирургические инструменты для высоких технологий. Ультразвуковые, плазменные СВЧ – инструменты, сшивающие аппараты, лазеры в хирургии 53.42 KB
  Ультразвуковые приборы для разъединения тканей Такие приборы в большинстве случаев основаны на преобразовании электрического тока в ультразвуковую волну магнитострикционное или пьезоэлектрическое явление. Механизм воздействия ультразвука на ткани основан на том что высокочастотная вибрация приводит к механическому разрушению межклеточных связей; и на кавитационном эффекте создание за короткий промежуток времени в тканях отрицательного давления что приводит к закипанию внутри и межклеточной жидкости при температуре тела; образующийся пар...
83920. Выбор способа операции, хирургический риск, операции по стандарту и протоколу. Паллиативные и радикальные операции 48.39 KB
  Паллиативные и радикальные операции. Выбор способа операции зависит от органа на котором будет проводиться оперативное вмешательство от локализации нервных стволов и сосудов по отношению к данному органу и т. Хирургический операционный риск опасность для пациента во время операции представляют как сама оперативная травма и связанные с ней осложнения кровотечения перитонит и т.
83921. Топографическая анатомия подключичной вены и подключичной артерии. Техника пункции подключичной вены. Подключичная артерия, хирургическая тактика при ранении 195.94 KB
  Топография подключичной вены: Подключичная вена начинается от нижней границы 1 ребра огибает его сверху отклоняется кнутри вниз и немного вперёд у места прикрепления к 1 ребру передней лестничной мышцы и входит в грудную полость. Медиально за веной имеются пучки передней лестничной мышцы подключичная артерия и затем купол плевры который возвышается над грудинным концом ключицы. При надключичном доступе точку Иоффе определяют в углу образованном наружным краем латеральной головки грудинноключичнососцевидной мышцы и верхним краем...
83922. Плечевое сплетение. Техника анестезии плечевого сплетения 54.05 KB
  Техника анестезии плечевого сплетения. Короткие ветви отходят в различных местах сплетения в надключичной его части и снабжают отчасти мышцы шеи а также мышцы пояса верхней конечности за исключением m. musculocutneus мышечнокожный нерв отходит от латерального пучка плечевого сплетения из C5 С7 прободает m. cutneus brchii medilis происходит из медиального пучка сплетения из С8 Th1 идет по подмышечной ямке медиально от .
83923. Хирургическая анатомия подмышечной области. Сосудисто-нервный пучок. Коллатеральное кровоснабжение в области надплечья. Подмышечная лимфодиссекция 56.11 KB
  При отведенной конечности область имеет форму ямки foss xillris. Собственная фасция fsci xillris в центре области тонкая в ней заметны узкие щели через которые проходят мелкие крове носные и лимфатические сосуды и нервы к коже. Подфасциальные образования Клетчаточное пространство подмышечной ямки расположено под fsci xillris. По форме это четырехгранная пирамида основанием которой является fsci xillris а верхушка лежит у середины ключицы между ней и I ребром.
83924. Контроль качества продукции в кулинарной промышленности 27.39 KB
  Перед проведением бракеража продукции общественного питания члены бракеражной комиссии или работник лаборатории должны ознакомиться с меню рецептурой блюд и изделий калькуляционными карточками или прейскурантом технологией приготовления блюд изделий качество которых оценивается а также с показателями их качества установленными нормативными документами. Бракеражная комиссия в своей деятельности руководствуется Положением о бракераже пищи в предприятиях общественного питания нормативными документами сборниками рецептур блюд и...