尝试使用fstream将字符写入文件:不匹配'运算符<<<'

时间:2017-04-16 12:10:39

标签: c++ arrays operators fstream ofstream

所以,我试图创建一个程序,从文件中读取一个字符,将它全部存储到一个字符数组中,然后写一个新文件,除了每个字符的原始数量增加一个(最有经验的程序员)这里会知道我在说什么)。所以我基本上试图制作自己的加密算法。但是我得到一个非常奇怪的错误: <various paths here>\main.cpp|27|error: no match for 'operator<<' (operand types are 'std::ifstream {aka std::basic_ifstream<char>}' and 'char')| 我已经听说过这个错误,但我所看到的只是当人们使用类定义的函数时才发生这种情况,这是我在程序中没有做到的。 这个错误还带有一个注释,我认为人们可能会觉得帮助我有用: <various paths here>\main.cpp|27|note: no known conversion for argument 1 from 'std::ifstream {aka std::basic_ifstream<char>}' to 'int'| 源代码如下:

#include <iostream>
#include <fstream>
using namespace std;

int main() {
    int array_size = 1024000;
    char Str[array_size];
    int position = 0;
    long double fsize = position;

    ifstream finput("in.txt");
    ifstream foutput("out.txt");
    if(finput.is_open()) {
        cout << "File Opened successfully. Storing file data into array." << endl;
        while(!finput.eof() && position < array_size) {
            finput.get(Str[position]);
            position++;
            fsize = position;
            cout << "Processed data: " << fsize / 1000 << "KB" << endl;
        }
        Str[position-1] = '\0';

        cout << "Storing done, encoding..." << endl << endl;
        for(int i = 0; Str[i] != '\0'; i++) {
            cout << Str[i] << "changed to " << char(Str[i] + 1) << endl;
            foutput << Str[i] += 1;
        }

    } else {
        cout << "File could not be opened. File must be named in.txt and must not be in use by another program." << endl;
    }
    return 0;
}

注意:我一直在使用fstream输出字符串(不是字符,记住这一点)在其他时间的文件上,它工作得很好!

2 个答案:

答案 0 :(得分:1)

您已声明ifstream foutput而不是ofstream foutput(您必须声明输出流而不是输入流。

  1. ifstream foutput("out.txt");替换为ofstream foutput("out.txt");
  2. 此外,由于运营商优先权,将foutput << Str[i] += 1更改为foutput << (Str[i] += 1)以删除错误。

答案 1 :(得分:1)

ifstream foutput("out.txt");

这是输入流,而不是输出流。将其更改为std::ofstream以获取输出流。

然后你会在这里收到另一个错误:

foutput << Str[i] += 1;

那是因为运营商的优先权。通过插入括号来修复它:

foutput << (Str[i] += 1);