fstream.open akzeptiert String-Objekt als Argument nicht???
Verfasst: Sa Dez 06, 2014 12:26 am
				
				Hallo liebe C/C++ - Gemeinde!
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
			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;
    }