<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[File schreiben mit Boost IoStreams und Filesystem]]></title><description><![CDATA[<p>Hallo,</p>
<p>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.</p>
<p>Entwicklungsumgebung Windows mit dem Embarcadero C++ Builder XE.</p>
<p>Und nun zu dem eigentlichen Problem. Prinzipiell kann ich die Daten in ein File schreiben. Allerdings ist bei einer Buffergröße &gt; 4096 Bytes Schluss. D.h. da steht dann einfach nicht mehr drin in dem File.</p>
<p>Unten stehend der Code. Anstelle von byteweise schreiben mit &quot;writer.put(...)&quot; hatte ich auch schon &quot;writer.write( pSrc, dwLength );&quot; probiert (also um die Daten in einem Rutsch zu schreiben). Es macht keinen Unterschied, mehr als 4096 geht nicht.</p>
<p>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).</p>
<p>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 &quot;writer&quot; ja benutzen um in ein File zu schreiben und normalerweise weiß ich ja zum Zeitpunkt des Schreibens nicht zwangsläufig die Größe.</p>
<p>Unten stehend der Code. Würde mich über Hilfe freuen.</p>
<pre><code>#include &quot;stdafx.h&quot;

#include &lt;boost/filesystem.hpp&gt;
#include &lt;boost/filesystem/fstream.hpp&gt;
#include &lt;boost/iostreams/device/file.hpp&gt;
#include &lt;boost/iostreams/stream.hpp&gt;
#include &lt;boost/iostreams/filtering_stream.hpp&gt;

namespace boostio = boost::iostreams;

int _tmain(int argc, _TCHAR* argv[])
{
	try
	{
		boostio::stream_buffer&lt;boostio::file_sink&gt; myFile( &quot;c:/hello.txt&quot; );
		std::ostream writer( &amp;myFile );
		for( int i = 0; i &lt; 10 * 1024; i++ )
		{
			writer.put( 'X' );
		}

		myFile.close();
	}
	catch( ... ) 
	{
	}

	return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/303243/file-schreiben-mit-boost-iostreams-und-filesystem</link><generator>RSS for Node</generator><lastBuildDate>Mon, 10 Aug 2026 14:46:15 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/303243.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 08 May 2012 19:14:25 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to File schreiben mit Boost IoStreams und Filesystem on Tue, 08 May 2012 19:14:25 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>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.</p>
<p>Entwicklungsumgebung Windows mit dem Embarcadero C++ Builder XE.</p>
<p>Und nun zu dem eigentlichen Problem. Prinzipiell kann ich die Daten in ein File schreiben. Allerdings ist bei einer Buffergröße &gt; 4096 Bytes Schluss. D.h. da steht dann einfach nicht mehr drin in dem File.</p>
<p>Unten stehend der Code. Anstelle von byteweise schreiben mit &quot;writer.put(...)&quot; hatte ich auch schon &quot;writer.write( pSrc, dwLength );&quot; probiert (also um die Daten in einem Rutsch zu schreiben). Es macht keinen Unterschied, mehr als 4096 geht nicht.</p>
<p>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).</p>
<p>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 &quot;writer&quot; ja benutzen um in ein File zu schreiben und normalerweise weiß ich ja zum Zeitpunkt des Schreibens nicht zwangsläufig die Größe.</p>
<p>Unten stehend der Code. Würde mich über Hilfe freuen.</p>
<pre><code>#include &quot;stdafx.h&quot;

#include &lt;boost/filesystem.hpp&gt;
#include &lt;boost/filesystem/fstream.hpp&gt;
#include &lt;boost/iostreams/device/file.hpp&gt;
#include &lt;boost/iostreams/stream.hpp&gt;
#include &lt;boost/iostreams/filtering_stream.hpp&gt;

namespace boostio = boost::iostreams;

int _tmain(int argc, _TCHAR* argv[])
{
	try
	{
		boostio::stream_buffer&lt;boostio::file_sink&gt; myFile( &quot;c:/hello.txt&quot; );
		std::ostream writer( &amp;myFile );
		for( int i = 0; i &lt; 10 * 1024; i++ )
		{
			writer.put( 'X' );
		}

		myFile.close();
	}
	catch( ... ) 
	{
	}

	return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2209596</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2209596</guid><dc:creator><![CDATA[Gast_321]]></dc:creator><pubDate>Tue, 08 May 2012 19:14:25 GMT</pubDate></item><item><title><![CDATA[Reply to File schreiben mit Boost IoStreams und Filesystem on Wed, 09 May 2012 10:32:37 GMT]]></title><description><![CDATA[<p>In der Datei kommt nicht alles an? Könnte daran liegen, dass du die Datei schließt, bevor du den Puffer von <code>writer</code> leerst. Einfach das völlig sinnfreie und hier (vermutlich) sogar falsche <code>close</code> weglassen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2209775</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2209775</guid><dc:creator><![CDATA[TyRoXx]]></dc:creator><pubDate>Wed, 09 May 2012 10:32:37 GMT</pubDate></item></channel></rss>