Skip to content

fstream

C++ 文件输入输出库

类继承关系

cpp

class basic_fstream: public basic_iostream {
    basic_fstream();

    explicit basic_fstream(
        const string& filename, 
        ios_base::openmode mode = ios_base::in | ios_base::out
    );

    bool is_open() const;

    /**
     * 打开文件
     */
    void open(
        const string& filename, 
        ios_base::openmode mode = ios_base::in | ios_base::out
    );

    void close();
}

using fstream  = basic_fstream<char>;

常见mode模式

mode模式说明
std::ios::in以输入模式打开文件
std::ios::out以输出模式打开文件
std::ios::app以追加模式打开文件
std::ios::ate打开文件并定位到文件末尾
std::ios::trunc打开文件并截断文件,即清空文件内容

写入文本文件

cpp
#include <fstream>

int main(int argc, char const *argv[])
{
    std::fstream fs;

    // 以输出模式打开文件
    fs.open("test.txt", std::ios::out);
    // 写入文本
    fs << "Hello, World!" << std::endl;

    // 关闭文件
    fs.close();

    return 0;
}

输出

shell
cat test.txt 
Hello, World!

读取文本文件

cpp
#include <fstream>
#include <iostream>

int main(int argc, char const *argv[])
{
    std::fstream fs;

    // 以读模式打开文件
    fs.open("test.txt", std::ios::in);

    // 逐行读取
    std::string text;
    while (getline(fs, text))
    {
        std::cout << text << std::endl;
    }

    // 关闭文件
    fs.close();

    return 0;
}

输出

shell
g++ fstream_read.cpp -o fstream_read && ./fstream_read
Hello, World!

tellg

获取文件大小

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

using namespace std;

streamsize get_file_size(string &filename)
{
    fstream file(filename, ios::in | ios::binary | ios::ate);
    if (!file)
    {

        return -1;
    }
    streamsize size = file.tellg();
    file.close();
    return size;
}

int main(int argc, char const *argv[])
{
    string filename("test.txt");
    streamsize file_size = get_file_size(filename);
    cout << "file size: " << file_size << endl;

    if (file_size > -1)
    {
        cout << "success" << endl;
    }
    else
    {
        cout << "open failed" << endl;
    }

    return 0;
}

输出结果

shell
$ g++ -std=c++11 filesize.cpp -o filesize && filesize
file size: 11
success