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 << "Вы не задали имя файла.";

}


 

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

22773. Реакція міжнародної спільноти на визнання УРСР членом-фундатором ООН 62.5 KB
  Відносини ЄССШАУкраїна. В СанФранціско в США 25 квітня 1945 р. У зв'язку з появою УРСР на високому міжнародному форумі на її адресу посипалося чимало гострих критичних зауважень переважно з кіл української діаспори в США та Канаді. Відносини ЄС Україна США.
22774. Українське питання на Ялтинський конференції (1945р.) 46 KB
  Національні інтереси України та механізми їх забезпечення. Позиція України щодо ЄЕП в контексті інтеграційних процесів на пострадянському просторі. Зрештою глави урядів трьох держав СРСР США й Великої Британії схвалили рішення що східний кордон Польщі проходитиме вздовж лінії Керзона з відхиленням від неї в деяких районах від п'яти до восьми кілометрів на користь Польщі Це було досягнення й України попри те що частина земель населених українцями залишалася під польською владою.Стеттініус який зазначив що радянський приклад можуть...
22775. Ініціативи дипломатії УРСР в 00Н 41 KB
  Концепції нейтралітету та позаблоковості в зовнішній політиці України. Відносини України з країнами Африки. Концепція нейтралітету та позаблоковостів в зовнішній політиці України. зазначається про намір України стати нейтральною однак в цьому документі крім положень що фіксують оборонний характер військової доктрини можна зустріти тезу про те що У дотримується свого позаблокового статусу.
22776. Створення та розгортання діяльності Наркомату закордонних справ УРСР 39.5 KB
  Механізм формування та реалізації зовнішньої політики України. Правда дещо несподіваною виявилася кандидатура наркома закордонних справ України. Механізм формування та реалізації зовнішньої політики України. Під керівництвом Президента України практична реалізація зовнішньополітичної діяльності забезпечується Кабінетом Міністрів України і здійснюється Міністерством закордонних справ іншими центральними органами державної виконавчої влади на основі Конституції і законів України.
22777. Українське питання на завершальному етапі Другої світової війни 42 KB
  Засади та основні напрямки зовнішньої політики України. Під кінець війни міжнародний авторитет України зріс збільшувалась увага в світі до життя й долі українського народу. Правда дещо несподіваною виявилася кандидатура наркома закордонних справ України. Засади та основні напрямки зовнішньої політики України З погляду концептуальної визначеності зовнішньополітичного курсу України особливо велике значення мав документ схвалений Верховною Радою України 2 липня 1993 р.
22778. УРСР на міжнародній арені 1944-1949 рр 56 KB
  Національні інтереси України зовнішній аспект. Співробітництво України в Чорноморському регіоні. Про значний міжнародний авторитет України свідчило обрання Д. Національні інтереси України зовнішній аспект.
22779. Зовнішньополітична діяльність закордонних українських громадсько-політичних організацій в повоєнній добі 45 KB
  Концепція стратегічного партнерства в зовнішній політиці України. Розбудова відносин України з країнами Африки. Концепції стратегічного партнерства в зовнішній політиці України Стратегічне партнерство являє собою стан відносин що характеризуються наявністю комплексних стратегічних інтересів в сіх сферах діяльності двох сторін з огляду на певну політичну взаємозалежність та готовність до застосування компромісних механізмів узгодження спільних інтересів. Але у випадку з нашою державою така взаємозалежність є асиметричною і як правило...
22780. Двосторонні договори та угоди УРСР 1944-1949 рр.: зміст, значення, наслідки 51 KB
  Проте дослідники звертали увагу на три справжні причини такого ставлення приховану надію на повернення західноукраїнських земель очікування можливої війни між союзниками СРСР та Великою Британією й США невдоволення поляків характером і діяльністю ПКНВ. Україну як незалежну державу США визнали 26 грудня 1991р. Кравчука до США. В ході візиту було підписано низку документів зокрема політичну декларацію та меморандум про взаєморозуміння між урядами України та США.
22781. Проблема множинного представництва на завершальному етапі II світової війни 83.5 KB
  Етапи відносин України та Російської Федерації. Передбачалося що на початку роботи конференції делегати Великобританії й США підтримають пропозицію про допуск до первісного членства двох радянських республік України та Білорусії. Етапи відносин України та Російської Федерації. розстрілу Білого дому та зміцнення позицій реформаторів у Кремлі курс щодо України став жорсткішим що виявилось у намаганнях на дострокових виборах 1994 р.