File schreiben mit Boost IoStreams und Filesystem



  • Hallo,

    ich habe eine Frage, und zwar möchte ich gerne Daten die in einem char* Buffer stehen in ein File schreiben. Da ich mich endlich mal näher mit Boost befassen möchte bin ich dabei auf Boost.IoStreams und Boost.Filesystem gestoßen.

    Entwicklungsumgebung Windows mit dem Embarcadero C++ Builder XE.

    Und nun zu dem eigentlichen Problem. Prinzipiell kann ich die Daten in ein File schreiben. Allerdings ist bei einer Buffergröße > 4096 Bytes Schluss. D.h. da steht dann einfach nicht mehr drin in dem File.

    Unten stehend der Code. Anstelle von byteweise schreiben mit "writer.put(...)" hatte ich auch schon "writer.write( pSrc, dwLength );" probiert (also um die Daten in einem Rutsch zu schreiben). Es macht keinen Unterschied, mehr als 4096 geht nicht.

    Beim Debuggen habe ich gesehen dass in der IoStream Implementierung von Dinkumware die verfügbare Größe des Streams abgefragt wird, diese Variable enthält diesen Wert (also die 4096).

    Wie kann ich diesen Wert anpassen? Ich verstehe ehrlich gesagt überhaupt nicht warum es hier scheinbar eine defaultmäßige Größenbeschränkung gibt. Ich will den "writer" ja benutzen um in ein File zu schreiben und normalerweise weiß ich ja zum Zeitpunkt des Schreibens nicht zwangsläufig die Größe.

    Unten stehend der Code. Würde mich über Hilfe freuen.

    #include "stdafx.h"
    
    #include <boost/filesystem.hpp>
    #include <boost/filesystem/fstream.hpp>
    #include <boost/iostreams/device/file.hpp>
    #include <boost/iostreams/stream.hpp>
    #include <boost/iostreams/filtering_stream.hpp>
    
    namespace boostio = boost::iostreams;
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    	try
    	{
    		boostio::stream_buffer<boostio::file_sink> myFile( "c:/hello.txt" );
    		std::ostream writer( &myFile );
    		for( int i = 0; i < 10 * 1024; i++ )
    		{
    			writer.put( 'X' );
    		}
    
    		myFile.close();
    	}
    	catch( ... ) 
    	{
    	}
    
    	return 0;
    }
    


  • In der Datei kommt nicht alles an? Könnte daran liegen, dass du die Datei schließt, bevor du den Puffer von writer leerst. Einfach das völlig sinnfreie und hier (vermutlich) sogar falsche close weglassen.


Anmelden zum Antworten