Textdatei schreiben - finde fehler nicht..



  • Ich habe ein programm geschrieben, welches daten aus einer textdatei ausliest, sie verändert und wieder abspeichert.
    Das laden funktioniert perfekt, aber es gibt einen kleinen fehler mit dem speichern.
    Die normale datei sieht so aus:

    [ARCDATAFILE_V1]
    [audi]
    farbe=schwarz
    ps=219
    kmh=256
    [bmw]
    farbe=silber
    ps=136
    kmh=194
    

    eingelesen, abgespeicher und wieder in die textdatei geschrieben, sieht sie jedoch so aus:

    [ARCDATAFILE_V1][audi]farbe=schwarz
    kmh=256
    ps=219
    [bmw]farbe=silber
    kmh=194ps=136
    

    Hier der code der fehlerhaften speiherfunktion, welche die daten aus einer 2dimensionalen map ließt und abspeicher.

    arc::ret8 arc::file::CDataFile::save(str _name){
    	std::fstream ofile;
        ofile.open(_name, std::ios::out | std::ios_base::binary);
    	if(!ofile.is_open()) return ERROR_FILEPATH;
    	ofile << "[ARCDATAFILE_V1]";
    	for(std::map<str, std::map<str,str> >::iterator xx = this->data->begin(); xx != this->data->end(); xx++){   // groups
    		ofile << std::endl << "[" << xx->first.c_str() << "]";
    		for(std::map<str,str>::iterator yy = xx->second.begin(); yy != xx->second.end(); yy++){   // variables
    			ofile << std::endl << yy->first.c_str() << "=" << yy->second.c_str();
    		}
    	}
    	ofile.close();
    	return ERROR_NONE;
    }
    

    die map ist folgendermaßen aufgebaut:

    std::map<std::string group, std::map<std::string var_name, std::string var_value>* data;
    

  • Mod

    Dein Stream ist "binary"!
    Benötugst Du einfach nur LF oder CR/LF Sequenzenin der Textdatei.
    Bei Letzterem lass dass binary weg.



  • danke, hat funktioniert 😉

    PS: ..das passiert wenn man einfach teile aus seinen funktionen für binary dateien kopiert 💡 😃


Anmelden zum Antworten