ifstream auf andere quelle setzen??



  • halli hallo,
    ich hab da mal ein kleines problem....
    ich lese eine datei ein, will aber noch eine andere danach einlesen. um variablen zu sparen schließe ich die datei mit input.close() und setzte sie mit input.open(...) auf eine andere datei. will ich nun eine ausgabe mit cout machen, wird diese einfach ignoriert. Warum und wie könnte ich das umgehen?

    hier der code

    std::ifstream input;
    input.open(argv[1],std::ifstream::in);
    sequenceX=FastaFile(input);
    //diese ausgabe funktioniert noch
    cout<<sequenceX;
    
    input.close();
    input.open(argv[2],std::ifstream::in);
    sequenceY=FastaFile(input);
    //wird nicht mehr ausgegen?!
    cout<<sequenceY;
    

    sequenceY wird nicht mehr ausgegeben.....aber warum nur?
    das problem könnte ich mit ner anderen variable umgehen....aber es muss doch auch mit dieser gehen

    danke schonmal stillsen



  • Hallo,
    hast du mal die Fehlerflags des ifstream-Objekts geprüft? Die werden von open bzw. close nämlich nicht automatisch zurückgesetzt. Sprich: versuch's mal mit einem input.clear() bevor du das zweite Mal liest.



  • hmm, hab ich noch nicht gemacht.
    ...aber kannst du bitte beschreiben wie das geht?
    danke



  • Man nehme:

    stillsen schrieb:

    std::ifstream input;
    input.open(argv[1],std::ifstream::in);
    sequenceX=FastaFile(input);
    //diese ausgabe funktioniert noch
    cout<<sequenceX;
    
    input.close();
    input.open(argv[2],std::ifstream::in);
    sequenceY=FastaFile(input);
    //wird nicht mehr ausgegen?!
    cout<<sequenceY;
    

    und mache daraus:

    std::ifstream input;
    input.open(argv[1],std::ifstream::in);
    sequenceX=FastaFile(input);
    //diese ausgabe funktioniert noch
    cout<<sequenceX;
    
    input.close();
    if (!input)
        input.clear();
    
    input.open(argv[2],std::ifstream::in);
    sequenceY=FastaFile(input);
    //wird nicht mehr ausgegen?!
    cout<<sequenceY;
    


  • haha
    ganz große klasse jetzt gehts danke!


Anmelden zum Antworten