在 C++ 中写入文件

Jinku Hu 2023年1月30日 2020年12月19日
  1. 使用 fstream<< 操作符写到文件上
  2. 使用 fstreamwrite 函数写入文件
  3. 使用 fwrite 函数写入文件
在 C++ 中写入文件

本文将为大家讲解几种在 C++ 中写入文件的方法。

使用 fstream<< 操作符写到文件上

C++ 中的文件 I/O 是用 fstream 类来处理的,它提供了多种内置的流操作和定位方法。一旦声明了 fstream 对象,我们就可以调用 open 函数,传递文件的名称和打开文件的模式作为参数。

当向文件写入时,我们指定 std::ios_base::out 模式,对应的是打开的写入状态。接下来,我们检查文件是否已经与流对象成功关联,也就是在 if 条件下调用 is_open 方法。此时,文件就可以使用 << 操作符接受输入,并根据需要处理输出。

注意,else 块可以用于来进行错误记录,或者我们可以实现错误处理例程,以达到更好的程序执行容错的目的。

#include <iostream>
#include <fstream>

using std::cout; using std::ofstream;
using std::endl; using std::string;
using std::fstream;

int main()
{
    string filename("tmp.txt");
    fstream file_out;

    file_out.open(filename, std::ios_base::out);
    if (!file_out.is_open()) {
        cout << "failed to open " << filename << '\n';
    } else {
        file_out << "Some random text to write." << endl;
        cout << "Done Writing!" << endl;
    }

    return EXIT_SUCCESS;
}

输出:

Done Writing!

使用 fstreamwrite 函数写入文件

另一种写入文件的方法是内置的 write 函数,可以从 fstream 对象中调用。write 函数接受一个字符串指针和存储在该地址的数据大小。结果,给定的数据被插入到与调用流对象相关联的文件中。

在下面的代码示例中,我们通过打印 open 函数调用的状态来演示最小的错误报告,但在现实世界的应用中,它需要更强大的异常处理,这在手册页中有所记载。

#include <iostream>
#include <fstream>

using std::cout; using std::ofstream;
using std::endl; using std::string;
using std::fstream;

int main()
{
    string text("Some huge text to write to\n");
    string filename2("tmp2.txt");
    fstream outfile;

    outfile.open(filename2, std::ios_base::out);
    if (!outfile.is_open()) {
        cout << "failed to open " << filename2 << '\n';
    } else {
        outfile.write(text.data(), text.size());
        cout << "Done Writing!" << endl;
    }

    return EXIT_SUCCESS;
}

输出:

Done Writing!

使用 fwrite 函数写入文件

另外,我们还可以使用 C 式文件 I/O 中的 fwrite 函数来写入文件。fwritevoid 指针中获取数据,程序员负责传递该地址存储的元素以及每个元素的大小。该函数需要文件流的类型为 FILE*,可以通过调用 fopen 函数获得。

注意,fwrite 操作成功后,返回写入文件的元素数。

#include <iostream>
#include <fstream>

using std::cout; using std::ofstream;
using std::endl; using std::string;

int main()
{
    string text("Some huge text to write to\n");
    string filename3("tmp3.txt");

    FILE *o_file = fopen(filename3.c_str(), "w+");
    if (o_file){
        fwrite(text.c_str(), 1, text.size(), o_file);
        cout << "Done Writing!" << endl;
    }

    return EXIT_SUCCESS;
}

输出:

Done Writing!
Author: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn

相关文章 - C++ File