Hillman
Hillman

Reputation: 43

opening a file based on user input c++

I am trying to make a program that would open a file based on the users input. Here`s my code:

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

int main() {

    string filename;
    ifstream fileC;

    cout<<"which file do you want to open?";
    cin>>filename;

    fileC.open(filename);
    fileC<<"lalala";
    fileC.close;

    return 0;
}

But when I compile it, it gives me this error:

[Error] no match for 'operator<<' (operand types are 'std::ifstream {aka std::basic_ifstream<char>}' and 'const char [7]')

Does anyone know how to solve this? Thank you...

Upvotes: 2

Views: 31755

Answers (2)

Donald Duck
Donald Duck

Reputation: 8882

Your code has several problems. First of all, if you want to write in a file, use ofstream. ifstream is only for reading files.

Second of all, the open method takes a char[], not a string. The usual way to store strings in C++ is by using string, but they can also be stored in arrays of chars. To convert a string to a char[], use the c_str() method:

fileC.open(filename.c_str());

The close method is a method, not an attribute, so you need parentheses: fileC.close().

So the correct code is the following:

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

int main() {
    string filename;
    ofstream fileC;

    cout << "which file do you want to open?";
    cin >> filename;

    fileC.open(filename.c_str());
    fileC << "lalala";
    fileC.close();

    return 0;
}

Upvotes: 7

Cory Kramer
Cory Kramer

Reputation: 117856

You cannot write to an ifstream because that is for input. You want to write to an ofstream which is an output file stream.

cout << "which file do you want to open?";
cin >> filename;

ofstream fileC(filename.c_str());
fileC << "lalala";
fileC.close();

Upvotes: 2

Related Questions