fstream-probs



  • moin, folgendes prob:

    [...]
    class BMP
    {
    	[...]
          int Save( int *, int, string );
    	[...]
    };
    
    BMP::Save( int *OutputVector, int OutputVectorSize, string FileName )
    {
    	char TrainDataHeader[255];
    	fstream fFile;
    	fFile.open( FileName.c_str(), ios::app );
    	if( fFile.is_open() )
    	{
    		fFile.getline( TrainDataHeader, 255 );
    		fFile.seekg( 0, ios::end);
    		fFile.write( (char*)&BMPData, sizeof( BMPData ) );
    		fFile << endl;
    		fFile.close();
    		return 0;
    	}
    
    	return 1;
    }
    
    int main(int argc, char *argv[])
    {
    	[...]
    	BMP BMPFile;
    	temp = new int(1);
    	string TrainFileName( "test.data" );
          cout << BMPFile.Save( temp, 2, TrainFileName )   << endl;		
    
    	return 0;
    
    }
    

    BMP::Save gibt immer 1 zurück. wenn ich die datei direkt in der main-funktion öffne gehts. weis einer woran das liegt??

    ach so: wenn da [...] steht hab ich an dieser stelle was weg gelassen.



  • Bei der Deklaration schreibst du:

    [...]
    
    int Save( int *, int, string ); 
    
    [...]
    

    bei der Definition dagegen schreibst du:

    BMP::Save( int *OutputVector, int OutputVectorSize, string FileName ); 
    
    // Ich glaube es muss:
    
    int BMP::Save( int *OutputVector, int OutputVectorSize, string Filename );
    
    // heissen.
    

    Caipi



  • ne, daran liegts nich. hat noch jemand ne idee?



  • Mach aus

    fstream fFile; 
    fFile.open( FileName.c_str(), ios::app );
    

    mal das hier:

    fstream file(FileName.c_str(), ios::out);
    

    Der Konstruktor erledigt nämlich die Aufgabe von open(). Desweiteren wäre in deinem Fall das Nutzen von ios::out mit der Verwendung von fstream angebracht, da dieses Flag aussagt: "Zum Schreiben öffnen".



  • naja, ios::out wär doof, weil ich ja lese und schreibe. die variante ohne ".open" ist zwar schöner, ändert aber nichts an meinem problem...



  • Eine kombination ist durchaus möglich.

    fstream file(FileName.c_str(), ios:in | ios::out);
    

    Hast du mal im Debugger geguckt, wie dein string FileName aussieht? Ist der gefüllt?



  • ahh, wunderbar. lag am ios::. wenn ich ios::out | ios::in nehme funktionierts.
    thx


Anmelden zum Antworten