Datei wird nicht per ifstream geöffnet unter linux ...



  • Hi,
    der folgende Snippet funktioniert aus irgendeinem Grunde leider nicht und ich frage mich warum ?
    Jedesmal springt die echo Funktion an und meint "Couldn't open config".
    Die darunter liegende echo Funktion in der Schleife gibt gar nichts von sich.
    Die config datei existiert und hat alle lese und schreibrechte, aber irgendwie ... will er sie nicht. Warum ???

    vector<string> res;
        string tmp;
    
        ifstream config_file;
        if(!config_file.is_open())
            config_file.open("config",  ios::app | ios::binary ); // open config.a
    
        if( ! config_file.good() )
            this->echo("Couldn't open config");
    
        while( getline( config_file, tmp, '\n' ) ){  //read loop, using string library function getline( istream& f, string& t, char delim)
            res.push_back( tmp );
    
            this->echo(tmp.c_str() );
    
            tmp.clear();
        }
    
        config_file.close() ;
    

    Danke !



  • Heisst das file wirklich nur config, oder hat es noch eine Extension? - Und ist der Pfad sicher richtig?

    Was enthält das File?



  • ich weis nicht
    aber good gibt glaube ich nicht wirklich genau das zurück was du willst
    und getline würde ich grade beim einlesen von dateien ohne das delim char verwenden

    ifstream f(...);
    if ( !f )
       echo("geht net");
    else
      while ( !f.eof() )
      {
          getline(f, tmp);
          vector.push_back(tmp);
      }
    

    so klappts auf jeden fall



  • Hi,

    ja, der Pfad stimmt. Die datei liegt *ohne anhängsel im namen - die heißt wirklich nur config* direkt neben der compilierten - ja, exe ist das ja unter linux nich...

    ich hab die is_open() abfrage rausgenommen und das good() auch, sowie das delim char '\n' ... es geht trozdem nicht ?? !!

    ich arbeite mit CodeBlocks, in der Debug configuration, falls das hilft...
    Danke schonmal !



  • -.- ich seh grad das ist binär oder?

    das geht etwas anders
    guck da mal hier
    http://www.cplusplus.com/reference/iostream/ifstream/



  • danke, aber daran lags auch net ...
    Ich hab das ios::binary rausgenommen, geht trotzdem nicht...

    Ich hab irgendwo mal gelesen, dass sich der LineEnd im nicht-binären modus zwischen Windoof und linux unterscheiden soll.
    Irgendeins von beiden brauch dann wohl noch einen Carriage return- stimmt, stimmt das halb oder gar nicht ?



  • Strange thing here, really...

    Also, was mich auch wundert ist, dass er das ios::app zu ignorieren scheint.
    Wenn ich ihm die datei mal wegnehme, erstellt er sie aber auch nicht oder so^^

    Ach so, falls das auch noch eine rolle spielt, der QT moc läuft da auch noch drüber...



  • Floyd schrieb:

    Ach so, falls das auch noch eine rolle spielt, der QT moc läuft da auch noch drüber...

    Hmmm. Warum verwendest du dann nicht gleich QFile?
    Wenn du so Probleme mit ifstream hast (und auch nicht auf den Kommentar von Skym0sh0 eingehen willst, für den es klappt) ist das sicherlich die Lösung.



  • franz schrieb:

    Floyd schrieb:

    Ach so, falls das auch noch eine rolle spielt, der QT moc läuft da auch noch drüber...

    Hmmm. Warum verwendest du dann nicht gleich QFile?
    Wenn du so Probleme mit ifstream hast (und auch nicht auf den Kommentar von Skym0sh0 eingehen willst, für den es klappt) ist das sicherlich die Lösung.

    mhh.. weil ich ifstream kenne^^

    Außerdem hab ich seine Lösung schon genau so eingebaut !!



  • Alles klar, er kam mit dem ios::app nicht zurecht - warum eigentlich nicht ??



  • Vielleicht weil es ein Input Stream ist und ios::app (fuer append) eine "Outputoperation" ist?



  • Mhh... da muss ich mich verlesen haben. Ich dachte, ios::app würde bewirken, dass die Datei erstellt wird, wenn sie nicht vorhanden ist.
    Aber gut, vielen Dank an Alle !


Anmelden zum Antworten