在 C++ 中创建文件

Jinku Hu 2023年1月30日 2021年4月29日
  1. 使用 std::fstreamstd::openstd::ios_base::out 在 C++ 中创建文件
  2. 使用 std::fstreamstd::openstd::ios_base::app 在 C++ 中创建文件
  3. 使用 std::fstreamfopen 函数在 C++ 中创建文件
在 C++ 中创建文件

本文将介绍几种如何在 C++ 中创建文件的方法。

使用 std::fstreamstd::openstd::ios_base::out 在 C++ 中创建文件

创建文件通常与文件打开操作有关,文件打开操作本身就是将文件流结构与磁盘上相应的物理文件相关联的操作。通常,文件创建操作取决于程序打开文件的模式。有多种打开文件的模式,例如只写模式,只读模式,追加模式等。通常,如果给定文件名不存在,则需要写入文件的每种模式都旨在创建一个新文件。因此,我们需要调用 std::fstreamopen 内置函数来创建一个新文件,其名称作为第一个 string 参数提供。open 的第二个参数指定打开文件流的模式,这些模式由语言预先定义(请参见 page)。

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

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

int main()
{
    string filename("output.txt");
    fstream output_fstream;

    output_fstream.open(filename, std::ios_base::out);
    if (!output_fstream.is_open()) {
        cerr << "Failed to open " << filename << '\n';
    } else {
        output_fstream << "Maecenas accumsan purus id \norci gravida pellentesque." << endl;
        cerr << "Done Writing!" << endl;
    }

    return EXIT_SUCCESS;
}

输出:

Done Writing!

使用 std::fstreamstd::openstd::ios_base::app 在 C++ 中创建文件

或者,我们可以以 std::ios_base::app 表示的追加模式打开文件,并在每次写入时强制将流定位在文件末尾。这种模式也假设在给定的路径中不存在新的文件,就会创建一个新的文件。请注意,可以使用 is_open 函数验证成功打开的文件流,该函数在与流关联时返回 true

#include <iostream>
#include <fstream>

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

int main()
{
    string text("Large text stored as a string\n");
    string filename2("output2.txt");
    fstream outfile;

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

    return EXIT_SUCCESS;
}

输出:

Done Writing!

使用 std::fstreamfopen 函数在 C++ 中创建文件

创建文件的另一种方法是利用 C 标准库接口 fopen,该接口返回 FILE*结构体。该函数有两个参数:一个字符串,该字符串指定要打开的文件路径名;另一个字符串文字,用于指示打开方式。定义了六种常见模式:r-当流位于开头时是只读的,w-只写-在开头时的内容,a-只写(追加)-放在末尾的位置文件,以及三个版本的加号-r+w+a+,其中还包括相反的模式。

#include <iostream>
#include <fstream>

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

int main()
{
    string text("Large text stored as a string\n");
    fstream outfile;

    string filename3("output3.txt");
    FILE *o_file = fopen(filename3.c_str(), "w+");
    if (o_file){
        fwrite(text.c_str(), 1, text.size(), o_file);
        cerr << "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++ Filesystem