file handling in c++

22
ФАЙЛОВЫЙ ВВОД/ВЫВОД В C+ +

Upload: maxim-shaptala

Post on 24-Jan-2015

121 views

Category:

Education


0 download

DESCRIPTION

About file handing in c++

TRANSCRIPT

Page 1: file handling in c++

ФАЙЛОВЫЙ ВВОД/ВЫВОД В C++

Page 2: file handling in c++

Общие шаги

1. Включение заголовочного файла fstream в программу.

2. Объявление файлового потока.

3. Связывание файлового потока с источником ввода/вывода.

4. Открытие файла

5. Использование файлового потока с операциями >>, <<, или другими функциями ввода/вывода.

6. Закрытие файла.

Page 3: file handling in c++

Файловый ввод/вывод в С++

Поток – последовательность символов интерактивный (iostream)

cin – входной поток связанный с клавиатурой.· cout – выходной поток связанный с дисплеем.· cerr – выходной поток, в который направляются

сообщения об ошибках, связан обычно с дисплеем.· clog - то же, что cerr, но буферизирован.

в файл (fstream) ifstream – определят новый входной поток (обычно

связанный с файлом).

ofstream – определяет новый выходной поток (обычно связанный с файлом).

Page 4: file handling in c++

Заголовочные файлы

iostream – содержит основную информацию необходимую для всех операций ввода/вывода

iomanip – содержит информацию полезную для форматирования потока ввода/вывода через манипуляторы

fstream – содержит информацию для файлового ввода/вывода

strstream – содержит информацию для выполнения операций ввода/вывод через память (т.е. через строки в памяти)

Page 5: file handling in c++

ios базовый класс. istream и ostream наследуется от ios ifstream наследуется от istream (и ios) ofstream наследуется от ostream (и ios) iostream наследуется от istream и ostream (& ios) fstream наследуется ifstream, iostream, и ofstream

Классы для потоков в C++

Page 6: file handling in c++

C++ потоки

//Добавляем заголовок#include <fstream>int main (){ /* Объявляем файловые потоки */

ifstream fsIn; // входнойofstream fsOut; // выходнойfstream both //входной & выходной

//Открываем файлы

inData.open("prog.dat"); //открываем входной файл

outData.open("prog.out"); //открываем выходной файл

// Код работы с потоками

.

// Закрываем файлы

inData.close();

outData.close();

return 0;

}

Page 7: file handling in c++

Функция оpen()

оpen() это метод каждого класса ( fstream, ifstream, ofstream)

void fstream :: open ( const char *filename, openmode mode);

void ifstream ::

open ( const char *filename, openmode mode= ios:: in);

void ofstream :: open ( const char *filename, openmode mode=

ios:: out | iso :: trunc);

Имя файла

Опционально, определяет как файл должен быть открыт

Можно сочетать несколько флагов вместе

Page 8: file handling in c++

Объект и метод open()

input_stream.open("numbers.dat“)

Имя потока

Вызываемый объект

Оператор

точка

Имя метода

Имя файла

Dir:\\folder\fileName.extention

Extention ( .dat, .out, .txt)

Page 9: file handling in c++

Валидация файла перед обращением к нему

//Проверить поток

if ( ! mystream) { cout << “Cannot open file.\n ”;}

//Используя метод //is_open()

if ( ! mystream.is_open()) {

cout << “File is not open.\n ”;}

Первый подход Второй подход

Page 10: file handling in c++

Пример: открытие файла

#include <fstream>

using namespace std;

int main()

{

/* объявление и автоматическое открытие файла*/

ofstream outFile(“fout.txt");

// валидация

if(! outFile) {Cout << “Cannot open file.\n ”;return 1;

}return 0;

}

#include <fstream>using namespace std;int main(){

// декларируем выходной потокofstream outFile;// открываем существующий файл

// fout.txt outFile.open(“fout.txt”);

// валидация

if(! outFile.is_open() ) {Cout << “Cannot open file.\n ”;return 1;

}

return 0;}

С применением конструктора

Используя метод open()

Page 11: file handling in c++

Пример: запись

#include <fstream>using namespace std;int main(){ /* объявление и автоматическое

открытие файла */ofstream outFile(“fout.txt");

//вывод как и в cout, // пишем в файлаoutFile << "Hello World!";

outFile.close();

return 0;}

#include <fstream>using namespace std;int main(){ // декларируем выходной поток

ofstream outFile;// открываем существущий файл fout.txt

outFile.open(“fout.txt”);

//вывод как и в cout, // пишем в файлаoutFile << "Hello World!";

outFile.close();

return 0;}

С применением конструктора

Используя метод open()

Page 12: file handling in c++

Пример: чтение

#include <iostream>#include <fstream>

int main(){ // Открываем текстовый файл

ifstream openFile(“data.txt"); char ch;

// выполняем пока не конец файлаwhile( ! оpenFile.eof() ){ оpenFile.get(ch); // получаем символ cout << ch; // выводим в сout}оpenFile.close(); // закрываем файл

return 0;}

#include <iostream>

#include <fstream>

#include <string> // для getline()

int main()

{ //октркываем файл

ifstream openFile(“data.txt");

string line;

while(!openFile.eof())

{//считать строку

getline(openFile, line);

cout << line;

}

openFile.close(); // close the file

return 0; }

Посимвольно Целой строки

Page 13: file handling in c++

Больше о функциях чтения ifstream fsin; fsIn.open(const char[] fname)

Связывает поток fsIn с внешним файлом fname. fsIn.get(char& character)

Получает следующий символ из потока fsIn и помещает в character.

fsIn.getline(char *buf, int n, char c = '\n') Извлекает строку из потока.

fsIn.eof() Проверяет конец файла.

fsIn >> c; // как cin

Page 14: file handling in c++

Больше о функциях записи

ofstream fsOut; fsOut.open(const char[] fname)

Связывает поток fsOut с внешним файлом fname.

fsOut.put(char character) Помещает символ character в выходной поток

fsOut. fsOut.eof()

tests for the end-of-file condition. fsOut << c; //как cout

Page 15: file handling in c++

ФлагиName Description

ios::in Открытие файла на чтение

ios::out Открытие файла на запись

ios::app Открытие на добавление. Вызывается ios::out

ios::ate Открытие на добавление. Не вызывается ios::out

ios::trunc Удалить содержимое файла. (усечь до нулевой длины)

ios::nocreate Если файл не существует, открытие с помощью функции open() невозможно

ios::noreplace Если файл существует, попытка открытия через функцию open() function, приведет к ошибке

ios::binary Открыть в бинарном режиме

Page 16: file handling in c++

Файловые флаги

#include <fstream>int main(void){

ofstream outFile("file1.txt", ios::out);outFile << "That's new!\n";outFile.close();

Return 0;}

Если необходимо установить больше фалгов просто используйте оператор |. Таким образом: ios::ate | ios::binary

Page 17: file handling in c++

Бинарный режим

Функции для бинарного режима get(): Извлекает один символ из потока

istream& istream::get(unsigned char&);

put(): Помещает один символ в поток

ostream& ostream::put(char);

read(): Производит чтение блока символов

istream& istream::read(unsigned char *buf, int len);

write(): Производит запись блока символов ostream& osteram::write(const unsigned char *buf, int n);

Page 18: file handling in c++

Работа с бинарными файлами

Некоторые полезные функции seekg(): переход к определенной позиции для чтения

seekp():переход к определенной позиции для записи

tellg(): Возвращает текущую позицию чтения из потока

tellp(): Как и tellg() но для записи

flush(): Сбрасывает буфер в файл

Page 19: file handling in c++

Детальнее о перемещенияи указателя

inFile.seekg(0) – перемещение указателя в начало файла

inFile.seekg(n, ios:beg) – перемещение позиции указателя на

n байт от начала файла

inFile.seekg(m, ios:end) – перемещение указателя на

m байт от конца файла

nFile.seekg(0, ios:end) – перемещение указателя в конец файла

Аналогичные операции в <ostream> и для функции seekp.

Page 20: file handling in c++

Пример

//Пример 1: Использование get() и put()#include <iostream>#include <fstream>void main(){

fstream File("test_file",ios::out | ios::in | ios::binary);char ch;ch='o';File.put(ch); //помещение значения ch в потокFile.seekg(ios::beg); //переход в начало файлаFile.get(ch); //чтение одного символаcout << ch << endl; //отображение егоFile.close();

}

Page 21: file handling in c++

Пример

//Пример 2: Использование read() и write()

#include <fstream.h>#include <string.h>void main(){

fstream File("test_file.txt",ios::out | ios::in | ios::binary);char arr[13];strcpy(arr,"Hello World!"); //Помещаем данные в массив

File.write(arr,5); //помещаем первые 5 символов в файл т.е. "Hello"

File.seekg(ios::beg); //перемещаемся в начало файла

static char read_array[10]; //Будем считывать данные в эту переменнуюFile.read(read_array,3); //считываем первые 3 символа, т.е. "Hel"

cout << read_array << endl; //отображаем

File.close();}

Page 22: file handling in c++

Пример

#include <fstream>void main(){

//Если у нас есть слово "Hello" в файле test_file.txtifstream File("test_file.txt");char arr[10];File.read(arr,10);

//мы должны увидеть 5, т.к. Hello длинной 5 символов

cout << File.tellg() << endl; File.close();

}