2017-02-03 5 views
1

Ich versuche, ein Programm zu machen, das eine Datei auf der Grundlage der Benutzereingabe öffnen würde. Hier `s mein Code:Öffnen einer Datei basierend auf Benutzereingabe C++

#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; 
} 

Aber wenn ich es kompilieren, es gibt mir diese Fehlermeldung:

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

Wer weiß, wie diese zu lösen? Vielen Dank ...

+0

Blick auf 'std :: ifstream'-Dokumentation. –

+4

... und stattdessen "std :: ofstream" verwenden. –

Antwort

5

Ihr Code hat mehrere Probleme. Wenn Sie in eine Datei schreiben möchten, verwenden Sie zuerst ofstream. ifstream ist nur zum Lesen von Dateien.

Zweitens, die offene Methode dauert eine char[], nicht eine string. Die übliche Art, Strings in C++ zu speichern, ist die Verwendung von string, aber sie können auch in Arrays von char s gespeichert werden. Um ein zu konvertieren string zu einem char[], verwenden Sie die c_str() Methode:

fileC.open(filename.c_str()); 

Die close Verfahren ist ein Verfahren, kein Attribut, so dass Sie Klammern müssen: fileC.close().

Also der richtige Code ist folgende:

#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; 
} 
2

Sie können nicht in ifstream schreiben, da dies für Eingabe ist. Sie möchten in eine ofstream schreiben, die eine Ausgabe Dateistream ist.

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

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

es gibt mir immer noch diesen Fehler [Fehler] keine passende Funktion für den Aufruf von 'std :: basic_ofstream :: basic_ofstream (Std :: string &)' – Hillman

+0

@Hillman Mein Fehler, der Konstruktor für 'std :: ofstream' dauert ein ' const char * 'anstelle von' std :: string', also rufe '.c_str()' von deinem Dateinamen auf. – CoryKramer

+0

Okay, es funktioniert :-D danke – Hillman

Verwandte Themen