使用ifstream、ofstream和fstream

2022-06-17 00:00:00 c++ fstream ifstream ofstream
  1. 正在尝试将"beave"一词读入文件

  2. 稍后将文件内容编辑为用户想要的内容,并将其存储在字符串"line"中

  3. 文件从不显示,当我手动检查时,文本文件为空。

#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main()
{
    string line = { " " };
    ofstream file1;
    file1.open("beef.txt");
    file1 << "beef" << endl;
    file1.close();
    file1.open("beef.txt");

    if (file1.is_open())
    {
        cout << "Enter what you would like to be contained in the file" << endl;
        cin >> line;
        ofstream file1;
        file1 << line << endl;
    }

    return 0;
}

解决方案

Astd::ofstream仅用于输出,不能用它读取输入。

Astd::ifstream仅用于输入,您不能用它编写输出。

因此,您需要

  • 使用单独的std::ofstreamstd::ifstream变量:

    int main()
    {
        ofstream out_file;
        ifstream in_file;
        string line;
    
        out_file.open("beef.txt", ios_base::trunc);
        if (out_file.is_open())
        {
            out_file << "beef" << endl;
            out_file.close();
        }
    
        in_file.open("beef.txt");
        if (in_file.is_open())
        {
            getline(in_file, line);
            in_file.close();
    
            cout << "File contains:" << endl;
            cout << line << endl;
        }
    
        cout << "Enter what you would like to be contained in the file" << endl;
        getline(cin, line);
    
        out_file.open("beef.txt", ios_base::trunc);
        if (out_file.is_open())
        {
            out_file << line << endl;
            out_file.close();
        } 
    
        in_file.open("beef.txt");
        if (in_file.is_open())
        {
            getline(in_file, line);
            in_file.close();
    
            cout << "File now contains:" << endl;
            cout << line << endl;
        }
    
        return 0;
    }
    
  • 根据调用open()时是否指定了in和/或out标志,使用一个std::fstream变量,该变量可同时用于输出和输入:

    int main()
    {
        fstream file;
        string line;
    
        file.open("beef.txt", ios_base::out | ios_base::trunc);
        if (file.is_open())
        {
            file << "beef" << endl;
            file.close();
        }
    
        file.open("beef.txt", ios_base::in);
        if (file.is_open())
        {
            getline(file, line);
            file.close();
    
            cout << "File contains:" << endl;
            cout << line << endl;
        }
    
        cout << "Enter what you would like to be contained in the file" << endl;
        getline(cin, line);
    
        file.open("beef.txt", ios_base::out | ios_base::trunc);
        if (file.is_open())
        {
            file << line << endl;
            file.close();
        }
    
        file.open("beef.txt", ios_base::in);
        if (in_file.is_open())
        {
            getline(in_file, line);
            in_file.close();
    
            cout << "File now contains:" << endl;
            cout << line << endl;
        }
    
        return 0;
    }
    

相关文章