Announcement

Collapse
No announcement yet.

noch probleme mit fstream

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • noch probleme mit fstream

    Hallo,
    wie mein folgender Code zeigt möchte ich mir eine C Datei erstellen die bestimmte Daten aus einem Bitmapfile enthält.
    Da fstream C++ standart ist möchte ich diese Klasse verwenden.

    In meinem Code habe ich folgendes Problem:
    Die Datei wird nach der ausgeführten if (!fout.good()){Anweisung siehe code}; automatisch geschlossen.
    Warum dies?

    Wenn ich nach der ausgeführten Anweisung if (!fout.good()){Anweisung}; die Datei wieder öffne
    wird trotz offner Datei nichts in die Datei geschrieben.

    Wenn die Datei vorhanden ist sprich die if(!fout.good()){Anweisung}; nicht ausgeführt wird wird geschrieben.

    Vielen Dank für hilfe.



    Code:
    void __fastcall TForm1::ffnen1Click(TObject *Sender)
    {
    
    ifstream fsource;
    fstream fout;
    
    BITMAPFILEHEADER bmpFH;
    BITMAPINFOHEADER bmpIH;
    
    if (OpenPictureDialog1->Execute()){
    		// Einlesen der Datei binär
    		fsource.open(OpenPictureDialog1->FileName.c_str(),ios::binary);
    
    		if (!fsource.good()){
    			 ShowMessage("Fehler beim Öffnen");
    			 return;
    		}
    		fsource.read((char*)&bmpFH,sizeof(BITMAPFILEHEADER));
    		fsource.read((char*)&bmpIH,sizeof(BITMAPINFOHEADER));
    
    		// Einlesen der Datei text
    		fout.open("bitmaps.c",ios::in|ios::out);
    
    		if (!fout.good()){
    			ShowMessage("Keine Datei bitmaps.c im Verzeichniss, Datei wird erzeugt");
    			// Datei erzeugen
    			ofstream fout("bitmaps.c");
    			// Info in Datei schreiben
    			fout <<"//===========================================" << endl;
    			fout <<"// Datei bitmaps.c " << endl;
    			fout <<"//===========================================" << endl;
    			}
    
    		//fout.close();
    		//fout.open("bitmaps.c",ios::in|ios::out|ios::app);
    
    		if(fout.is_open())ShowMessage("offen");
    		else ShowMessage("geschlossen");
    
    		// Dateizeiger auf Dateiende setzen
    		fout.seekp( 0L,ios::end);
    		fout << endl;
    		fout <<"#define XXXHidh "<<bmpIH.biWidth<< endl;
    		fout <<"#define XXXWidh "<<bmpIH.biHeight<< endl;
    		fout << endl;
    		fout <<"extern const unsigned char[]= {"<< endl;
    		fout << endl;
    		fsource.get();
    		fout <<"0x"<< uppercase << hex << bmpIH.biWidth <<","<< endl;
    		fout <<"};"<< endl;
    	}
     }

  • #2
    fout.close() fehlt oder fout.flush().
    Dein streampuffer ist nur temporär.
    Wenn es geich geschrieben werden soll immer ein flush, dieses leert den puffer.

    mfg
    Fred

    Comment


    • #3
      Hallo,
      das auskommentierte close() / open() und dann schreiben habe ich ja probiert doch dies geht nicht wenn vorher die Abfrage if (!fout.good()) true ist (die Anweisungen ausgeführt worden sind. Das schreiben in dieser Anweisung ist ja erfolgreich!)
      ein zusätzliches fout.flush() ändert da nichts.

      grüsse sirAnton

      Comment


      • #4
        ofstream fout("bitmaps.c");
        Du hast fout doppelt vergeben.

        gruß fred

        Comment

        Working...
        X