Работа с файлами Для работы с файлами в стандартной библиотеке определен заголовочный файл fstream



бет1/2
Дата20.08.2022
өлшемі136,44 Kb.
#38195
  1   2

Работа с файлами
Для работы с файлами в стандартной библиотеке определен заголовочный файл fstream, который определяет базовые типы для чтения и записи файлов. В частности, это:

  • ifstream: для чтения с файла

  • ofstream: для записи в файл

  • fstream: совмещает запись и чтение

Для работы с данными типа wchar_t для этих потоков определены двойники:

  • wifstream

  • wofstream

  • wfstream

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


При операциях с файлом вначале необходимо открыть файл с помощью функции open(). Данная функция имеет две версии:

  • open(путь)

  • open(путь, режим)

Для открытия файла в функцию необходимо передать путь к файлу в виде строки. И также можно указать режим открытия. Список доступных режимов открытия файла:

  • ios::in: файл открывается для ввода (чтения). Может быть установлен только для объекта ifstream или fstream

  • ios::out: файл открывается для вывода (записи). При этом старые данные удаляются. Может быть установлен только для объекта ofstream или fstream

  • ios::app: файл открывается для дозаписи. Старые данные не удаляются.

  • ios::ate: после открытия файла перемещает указатель в конец файла

  • ios::trunc: файл усекается при открытии. Может быть установлен, если также установлен режим out

  • ios::binary: файл открывается в бинарном режиме

Если при открытии режим не указан, то по умолчанию для объектов ofstream применяется режим ios::out, а для объектов ifstream - режим ios::in. Для объектов fstream совмещаются режимы ios::out и ios::in.

1
2
3
4
5
6
7
8
9
10
11
12
13
14

std::ofstream out; // поток для записи
out.open("D:\\hello1.txt"); // окрываем файл для записи
std::ofstream out2;
out2.open("D:\\hello2.txt", std::ios::app); // окрываем файл для дозаписи
std::ofstream out3;
out2.open("D:\\hello3.txt", std::ios::out | std::ios::trunc); // установка нескольких режимов
std::ifstream in; // поток для чтения
in.open("D:\\hello4.txt"); // окрываем файл для чтения
std::fstream fs; // поток для чтения-записи
fs.open("D:\\hello5.txt"); // окрываем файл для чтения-записи

Однако в принципе необязательно использовать функцию open для открытия файла. В качестве альтернативы можно также использовать конструктор объектов-потоков и передавать в них путь к файлу и режим открытия:

1
2

fstream(путь)
fstream(путь, режим)

При вызове конструктора, в который передан путь к файлу, данный файл будет автоматически открываться:



1
2
3

std::ofstream out("D:\\hello.txt");
std::ifstream in("D:\\hello.txt");
std::fstream fs("D:\\hello.txt", std::ios::app);

Вообще использование конструкторов для открытия потока является более предпочтительным, так как определение переменной, представляющей файловой поток, уже преполагает, что этот поток будет открыт для чтения или записи. А использование конструктора избавит от ситуации, когда мы забудем открыть поток, но при этом начнем его использовать.
В процессе работы мы можем проверить, окрыт ли файл с помощью функции is_open(). Если файл открыт, то она возвращает true:

1
2
3
4
5
6

std::ifstream in; // поток для чтения
in.open("D:\\hello.txt"); // окрываем файл для чтения
// если файл открыт
if (in.is_open())
{
}

Закрытие файла
После завершения работы с файлом его следует закрыть с помощью функции close(). Также стоит отметить, то при выходе объекта потока из области видимости, он удаляется, и у него автоматически вызывается функция close.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

#include
#include
int main()
{
std::ofstream out; // поток для записи
out.open("D:\\hello.txt"); // окрываем файл для записи
out.close(); // закрываем файл
std::ifstream in; // поток для чтения
in.open("D:\\hello.txt"); // окрываем файл для чтения
in.close(); // закрываем файл
std::fstream fs; // поток для чтения-записи
fs.open("D:\\hello.txt"); // окрываем файл для чтения-записи
fs.close(); // закрываем файл
return 0;
}

Стоит отметить, что при компиляции через g++ следует использовать флаг -static, если программа работает со файлами и использует типы из заголовочного файла fstream:


g++ app.cpp -o app -static


Достарыңызбен бөлісу:
  1   2




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет