Ich bin C/C++ Neuling, ein bisschen am Einlesen und Probieren und habe zum ersten Mal ein (naja) ernstes Problem:
Ich will eine Datei zum Lesen öffnen. Der Datei- bzw. Pfadname soll per Kommandozeilenargument ( argv ) übernommen werden. Bevor mit dem Pfadnamen die Datei geöffnet wird, soll ggf. noch automatisch die Namenserweiterung angehängt werden, Bsp. ".txt". Für solche String-Operationen gibt es ja in der C++ Standard-Bib die Klasse "string" mit lauter wunderbaren und nützlichen Funktionen.
Jetzt hab ich aber das Problem: Ich schaffe es nicht, das string-Objekt der fstream.open-Methode als Argument schmackhaft zu machen - der Compiler gibt ständig Fehlermeldungen aus. (Im Codebeispiel die Zeile "Datei.open(Dateiname, ios::in)" , wobei Datei ein ifstream und Dateiname das string-Objekt ist. )
Was mache ich falsch?
Habe trotz Suche keine Lösung gefunden.
Muss ich etwa auf cstring ausweichen (dann ist es aber nicht mehr "reinrassig" C++ ...)?
Oder muss ich vielleicht "nur" einen kleinen aber wichtigen Operator benutzen?
Oder einen anderen Workaround verwenden?
Falls das ne Rolle spielt, ich verwende gcc bzw. g++, die Platform ist Linux Debian wheezy.
LG heizoeli
Code: Alles auswählen
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main(int argc, char* argv[])
{
string buffer;
string Dateiname;
ifstream Datei;
if (argc >= 2) {
Dateiname = argv[1];
Dateiname += ".txt";
cout << Dateiname << endl; // zur Kontrolle ob Dateiname stimmt
Datei.open(Dateiname, ios::in);
// ^ Das akzeptiert die ifstream.open -Funktion nicht
// Was mache ich falsch?
// Datei.open("Test.txt", ios::in); // funktioniert
getline(Datei, buffer);
cout << buffer << endl;
Datei.close();
}
return 0;
}