C++

Файловый ввод-вывод в C++: ifstream, ofstream и чтение строк

Файловый ввод-вывод в C++ делают через заголовок <fstream>. Для чтения файла используют std::ifstream, для записи — std::ofstream, а для чтения и записи в одном потоке — std::fstream

Коротко:

#include <fstream>
  • std::ifstream — input file stream, чтение;
  • std::ofstream — output file stream, запись;
  • std::fstream — чтение и запись.

Записать текст в файл

#include <fstream>
#include <iostream>

int main() {
    std::ofstream file("data.txt");

    if (!file) {
        std::cout << "Не удалось открыть файл для записи\n";
        return 1;
    }

    file << "Hello, file!\n";
    file << "Second line\n";

    return 0;
}

После запуска рядом с программой появится файл data.txt. Если файл уже существовал, обычный std::ofstream file("data.txt") перезапишет его

Добавить данные в конец файла

Чтобы не перезаписывать файл, а дописывать в конец, используйте режим std::ios::app:

std::ofstream file("log.txt", std::ios::app);

file << "Новая строка лога\n";

Такой режим удобен для логов и истории действий

Прочитать файл построчно

#include <fstream>
#include <iostream>
#include <string>

int main() {
    std::ifstream file("data.txt");

    if (!file) {
        std::cout << "Файл не найден\n";
        return 1;
    }

    std::string line;

    while (std::getline(file, line)) {
        std::cout << line << "\n";
    }

    return 0;
}

std::getline читает целую строку до перевода строки. Это хороший вариант для текстовых файлов

Прочитать числа из файла

Если в файле лежат числа:

10 20 30

их можно читать через оператор >>:

#include <fstream>
#include <iostream>

int main() {
    std::ifstream file("numbers.txt");

    int value;

    while (file >> value) {
        std::cout << value * 2 << "\n";
    }

    return 0;
}

Цикл работает, пока удается прочитать очередное число

Прочитать весь файл в строку

Иногда файл нужно загрузить целиком, например для простого анализа текста:

#include <fstream>
#include <iostream>
#include <sstream>
#include <string>

int main() {
    std::ifstream file("data.txt");

    if (!file) {
        std::cout << "Файл не открыт\n";
        return 1;
    }

    std::ostringstream buffer;
    buffer << file.rdbuf();

    std::string content = buffer.str();

    std::cout << content << "\n";
    return 0;
}

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

Текстовый и бинарный режим

Для обычного текста чаще достаточно стандартного режима. Если вы работаете с изображениями, архивами или другими бинарными данными, открывайте файл с std::ios::binary:

std::ifstream file("image.bin", std::ios::binary);

Бинарный режим помогает избежать преобразований перевода строки и нужен для корректной работы с байтами

Где программа ищет файл

Относительный путь вроде "data.txt" считается относительно рабочей директории процесса, а не всегда относительно файла main.cpp. В IDE это часто путает новичков

Если программа не находит файл:

  • проверьте рабочую директорию запуска;
  • попробуйте временно указать абсолютный путь;
  • выведите диагностическое сообщение;
  • убедитесь, что имя файла написано без ошибки.

Закрывать ли файл вручную

Обычно файл закрывается автоматически, когда объект ifstream или ofstream выходит из области видимости. Но можно закрыть явно:

file.close();

Явное закрытие полезно, если вы хотите сразу освободить файл или проверить состояние после записи

Частые ошибки

Не проверять открытие файла

Перед чтением или записью проверяйте поток:

if (!file) {
    std::cout << "Ошибка открытия\n";
}

Думать, что файл ищется рядом с исходником

IDE может запускать программу из папки сборки. Поэтому файл рядом с main.cpp может быть не найден

Путать getline и оператор >>

>> читает до пробела, а getline читает всю строку. Для текста с пробелами нужен getline

Короткий вывод

Для файлового ввода-вывода в C++ используйте <fstream>. Для записи берите std::ofstream, для чтения — std::ifstream. Всегда проверяйте, что файл открылся, и учитывайте рабочую директорию запуска

Связанные материалы:

Что почитать дальше по C++

Если нужен общий маршрут по теме, откройте рубрику C++. Для соседних задач пригодятся эти разборы:

Подписаться
Уведомить о
guest
0 комментариев
Старые
Новые Популярные

Настройки cookie

0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x