Objekt in eine txt schreiben und wieder auslesen



  • Guten Abend zusammen.

    Nach langer verzweifelter Suche habe ich mich doch entschlossen dieses Thema zu eröffnen.
    Es handelt sich um ein Uni-Projekt das in Visual Studio 2012 umgesetzt werden soll. Um genau zu sein ist es ein .net Projekt.
    Eine kleine Teilaufgabe davon ist es Objekte bzw. deren Eigenschaften in ein File zu schreiben und wieder auszulesen. Bis lang habe ich folgendes probiert aber irgendwie funktioniert es nicht wie es soll.

    So wird in die Datei geschrieben

    int FileHandler::writeData(struct MyProberties properties)
    {
    	ofstream _dataStream;
    	_dataStream.open("properties.txt", ios_base ::out | ios_base ::app |ios_base::binary);
    
    	if(!_dataStream.good())
    	{
    		System::Windows::Forms::MessageBox::Show(
    			"Datei konnte nicht geöffnet werden!",
    			"Fehler");
    
    		return 1 ;
    	}
    	else
    	{
    		_dataStream.write( (const char*) (&properties), sizeof(properties));
    	}
    
    	_dataStream.close();
    
    	return 0;
    }
    

    Und so ausgelesen

    void FileHandler::readData()
    {
    	fstream _dataStream;
    	ios::pos_type _tempLength;
    	ios::pos_type _position;
    	long _end;
    	String^ _tempZeichen = _alowedChars[i].ToString();
    
    	if(!_dataStream.good())
    	{
    		System::Windows::Forms::MessageBox::Show(    
    			"Datei konnte nicht geöffnet werden!",
    			"Fehler");
    	}
    	else
    	{
    		_position = _dataStream.tellg(); 
    		_dataStream.seekg(0, ios::end);	
    		_end = _dataStream.tellg();
    		_tempLength = (_end - _position) / sizeof(MyProberties);
    		_dataStream.seekg(0, ios::beg);	
    		MyProberties *_result;
    
    		for(int j = 0; j < _tempLength; j++)		
    		{
    			_dataStream.read((char*) (&_result),sizeof( _result));
    			// ....
    		}
    	}
    	_dataStream.close();
    }
    

    Der Code ist ausführbar, die Datei wird angelegt und es stehen binäre, für mich unlesbare, Daten in dem File. Das Auslesen geht auch ohne Fehler aber die Eigenschaften haben dann den Wert 0.
    Die Daten die in das File geschrieben werden sind jedoch nicht 0. Das verrät mir der Debugger.

    Wäre Dankbar für jeden Tipp.
    MfG T.



  • Versuchst du ein managed Objekt mit unamanged Funktionen zu schreiben ? Das ist keine gute Idee.
    Nimm doch einfach die .NET Tools, z.B: BinaryFormatter. Damit geht das recht schnell und sicher.

    Zu deinem Code:

    MyProberties *_result; //Nue ein Pointer, legt keine Speicher an. Da darfst du dann auch nicht reinschreiben.
    
     for(int j = 0; j < _tempLength; j++)        
    {
         _dataStream.read((char*) (&_result),sizeof( _result)); //Pointer auf den Pointer, nicht das was du willst
    
    }
    

Log in to reply