0Pricing
C++ Academy · Урок

Запись файлов с ofstream

Записывайте выходные файлы

«Запись файлов с ofstream» — бесплатный урок C++ Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения C++ Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс C++ Academy содержит 4 уроков всего.

Что такое выходной файловый поток

std::ofstream (выходной файловый поток) записывает данные в файлы. Он работает подобно std::cout, но его назначением является файл.

#include <iostream>
#include <fstream>

int main() {
    std::ofstream out("hello.txt");
    out << "Hello, file!\n";
    std::cout << "wrote file\n";
    return 0;
}

Запись текста

Используйте оператор <<, чтобы записывать строки и числа, точно так же как при выводе в консоль.

#include <iostream>
#include <fstream>

int main() {
    std::ofstream out("report.txt");
    out << "Score: " << 95 << '\n';
    out << "Grade: A\n";
    std::cout << "done\n";
    return 0;
}

Усечение по умолчанию

Открытие существующего файла с помощью ofstream стирает его прежнее содержимое. Каждый запуск начинается с чистого файла.

#include <iostream>
#include <fstream>

int main() {
    std::ofstream("t.txt") << "old content\n";
    std::ofstream out("t.txt");
    out << "new content\n";
    std::ifstream in("t.txt");
    std::string line; std::getline(in, line);
    std::cout << line << '\n';
    return 0;
}

Добавление данных

Передайте std::ios::app, чтобы сохранить существующее содержимое и добавить новые данные в конец.

#include <iostream>
#include <fstream>

int main() {
    std::ofstream("log.txt") << "line1\n";
    std::ofstream out("log.txt", std::ios::app);
    out << "line2\n";
    out.close();
    std::ifstream in("log.txt");
    std::string l; int n = 0;
    while (std::getline(in, l)) ++n;
    std::cout << n << " lines\n";
    return 0;
}

Проверка успешности записи

Проверьте поток после открытия. Если он находится в состоянии bad, запись завершится без сообщения об ошибке.

#include <iostream>
#include <fstream>

int main() {
    std::ofstream out("ok.txt");
    if (!out) {
        std::cout << "failed to open\n";
        return 1;
    }
    out << "safe write\n";
    std::cout << "write ok\n";
    return 0;
}

Запись чисел и форматирование

Манипуляторы ввода-вывода, такие как std::fixed и std::setprecision, работают и с файловыми потоками.

#include <iostream>
#include <fstream>
#include <iomanip>

int main() {
    std::ofstream out("pi.txt");
    out << std::fixed << std::setprecision(3) << 3.14159 << '\n';
    out.close();
    std::ifstream in("pi.txt");
    std::string s; in >> s;
    std::cout << s << '\n';
    return 0;
}

Запись данных в цикле

Записывайте множество строк в цикле. На каждой итерации в файл отправляется одна запись.

#include <iostream>
#include <fstream>

int main() {
    std::ofstream out("squares.txt");
    for (int i = 1; i <= 5; ++i) out << i << ' ' << i * i << '\n';
    out.close();
    std::cout << "wrote 5 rows\n";
    return 0;
}

Сброс буфера

Вывод буферизуется. std::flush или std::endl немедленно принудительно записывает буфер на диск; закрытие также выполняет сброс буфера.

#include <iostream>
#include <fstream>

int main() {
    std::ofstream out("flush.txt");
    out << "important" << std::flush;
    std::cout << "flushed to disk\n";
    return 0;
}

Перевод строки и сброс буфера

'\n' лишь добавляет символ новой строки. std::endl добавляет символ новой строки и выполняет сброс буфера, поэтому в тесных циклах работает медленнее.

#include <iostream>
#include <fstream>

int main() {
    std::ofstream out("nl.txt");
    out << "fast\n";          // newline only
    out << "slow" << std::endl; // newline + flush
    std::cout << "both written\n";
    return 0;
}

Запись write, затем чтение read

Распространённый шаблон: записать данные, закрыть файл, а затем снова открыть его для чтения.

#include <iostream>
#include <fstream>

int main() {
    {
        std::ofstream out("rt.txt");
        out << 7 << ' ' << 8 << '\n';
    }
    std::ifstream in("rt.txt");
    int a, b; in >> a >> b;
    std::cout << a + b << '\n';
    return 0;
}

Выбор режимов открытия

Объединяйте флаги с помощью |. Распространённые режимы: ios::out (по умолчанию), ios::app (добавление), ios::trunc (стирание).

#include <iostream>
#include <fstream>

int main() {
    std::ofstream out("modes.txt", std::ios::out | std::ios::trunc);
    out << "fresh\n";
    std::cout << "opened with explicit modes\n";
    return 0;
}

Быстрая проверка

Проверьте, насколько хорошо Вы понимаете режимы ofstream.

Итоги

Вы узнали, что std::ofstream:

  • выполняет запись с помощью <<, по умолчанию усекая прежнее содержимое
  • добавляет данные с помощью std::ios::app
  • буферизует вывод; std::flush/std::endl/закрытие отправляют его на диск

Далее Вы научитесь работать с необработанными байтами в двоичных файловых операциях ввода-вывода.

Часто задаваемые вопросы

Урок «Запись файлов с ofstream» бесплатный?

Да — полный текст урока «Запись файлов с ofstream» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс C++ Academy, подпишись на CoddyKit PRO. Курс C++ Academy содержит 4 уроков всего.

Чему я научусь в уроке «Запись файлов с ofstream»?

Записывайте выходные файлы Ты практикуешь C++ Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать C++ Academy?

Предыдущий опыт не требуется. C++ Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.

Сколько времени занимает урок «Запись файлов с ofstream»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке C++ Academy?

Да. Каждый урок C++ Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Чтение файлов с ifstream
  2. Запись файлов с ofstream
  3. Двоичный ввод-вывод файлов
  4. Обработка ошибок и состояние
← Назад к C++ Academy