русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


Файли з довільним доступом


Дата додавання: 2014-04-22; переглядів: 972.


Функція write класу ostream виводить фіксоване число байтів, починая з заданого місця в пам'яті, в заданий поток. Якщо потік зв’язаний з файлом, дані будуть записані починая з позиції в файлі, заданої вказівника позиції в файлі put. Функція read класу istream виводить фіксоване число байтів з заданого потоку в ділянку пам'яті, починая з вказаної адреси. Якщо потік пов’язаний з файлом, байти виводяться починая з позиції в файлі, заданої за допомогою вказівника позиції в файлі get.

Таким чином, для того, щоб записати в файл значення змінної цілого типу з іменем number замість використання оператору

 

outFile << number;

 

який може записати для чотирибайотовго цілого від одного до 11 символів (до 10 розрядів плюс знак, для кожного необхідний один байт пам'яті), можна використовувати оператор

 

outFile.write( ( char * ) &number, sizeof( number ) );

 

який завжди буде записувати в файл 4 байта для чотирибайтового цілого. Тип першого аргументу функції write це char * , тому необхідно використовувати перетворення типів. Другий аргумент визначає число байтів, які необхідно записати. Зазвичай функція write використовується для запису в файл значень структурних змінних.

Створемо програму для обробки інформації про 5 студентів вищого навчального закладу. Для кожного з студентів необхідно зберігати порядковий номер, прізвище, ім’я, по батькові, рейтинг (дійсне число від 0 до 5).

Спочатку створемо з незаповненими структурами для кожного студента – код дорівнює нулю, замість прізвища, ім’я, по батькові – порожній рядок, рейтинг 0.0.

 

#include <iostream>

#include <fstream>

using namespace std;

int main( ) {

struct student {

int id;

char pib[ 20 ];

double rating;

};

const int N = 5;

ofstream fout ( "test.txt", ios::out );

if ( !fout ) return 1;

student s = { 0, "", 0.0 };

for ( int i = 1; i <= N; i++ )

fout.write( ( char * ) &s, sizeof( student ) );

fout.close();

}

 

Для запису даних в файл будемо використовувати функцію seekp, яка встановлює вказівник файлу put в задану позицію в файлі. У функції один параметр – ціле число, номер байта, на який необхідно встановити вказівник put.

 

#include <iostream>

#include <fstream>

using namespace std;

int main( ) {

struct student {

int id;

char pib[ 20 ];

double rating;

};

const int N = 5;

student s[ N ] = {

{ 4, "Ddd A.A.", 4.4 },

{ 3, "Ccc A.A.", 3.3 },

{ 2, "Bbb A.A.", 2.2 },

{ 5, "Eee A.A.", 5.5 },

{ 1, "Aaa A.A.", 1.1 }

};

ofstream fout( "test.txt", ios::out );

if ( !fout ) return 1;

for ( int i = 0; i < N; i++ ) {

fout.seekp( ( s[ i ].id - 1 ) * sizeof( student ) );

fout.write( ( char * ) &s[ i ], sizeof( student ) );

}

fout.close();

}

 

Функція read класу istream читає в об’єкт задану кількість байтів з поточної позиції у потоці. Перший аргумент функцій – вказівник на char- адреса в пам'яті, в яку необхідно записати інформацію, другий вказівник – ціле число, кількість байтів, які необхідно прочитати.

 

#include <iostream>

#include <fstream>

using namespace std;

int main( ) {

struct student {

int id;

char pib[ 20 ];

double rating;

};

student s;

ifstream fin( "test.txt", ios::in );

if ( !fin ) return 1;

fin.read( ( char * ) &s, sizeof( student ) );

while ( ! fin.eof() ) {

cout << s.id << "\t" << s.pib << "\t" << s.rating

<<endl;

fin.read( ( char * ) &s, sizeof( student ) );

}

fin.close();}

 


<== попередня лекція | наступна лекція ==>
Послідовний запис до файлу і послідовне читання з файлу | Посилання. Призначення посилань


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн