<?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[std::ostream write() schreibt manchmal zu wenige Bytes in Datei]]></title><description><![CDATA[<p>Mein Problem ist, dass die Methode write von ofstream <strong>manchmal</strong> nicht alle Bytes, die ich mit <code>recv()</code> (SOCKETS) empfange, in die erstellte Datei schreibt:</p>
<pre><code class="language-cpp">os.open(s,std::ios::binary | std::ios::app);
		if((retval=recv(sock,buf2,BUF_SIZ,0))&gt;0)
		{
		os.write(buf2,retval);
		}

		if(os.bad())
		{
			MessageBox(0,&quot;Fehler&quot;,0,0);
		}
</code></pre>
<p>Woran kann das liegen? Kann ich irgendwie überprüfen, wieviele Bytes in die Datei geschrieben wurden und gegebenenfalls die restlichen Bytes noch hinzuschreiben? Rückgabewert von <code>write()</code> ist ja *this, womit ich nicht viel anfangen kann (bin neu).</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/276353/std-ostream-write-schreibt-manchmal-zu-wenige-bytes-in-datei</link><generator>RSS for Node</generator><lastBuildDate>Wed, 26 Aug 2026 10:18:45 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/276353.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 31 Oct 2010 19:11:57 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to std::ostream write() schreibt manchmal zu wenige Bytes in Datei on Sun, 31 Oct 2010 19:11:57 GMT]]></title><description><![CDATA[<p>Mein Problem ist, dass die Methode write von ofstream <strong>manchmal</strong> nicht alle Bytes, die ich mit <code>recv()</code> (SOCKETS) empfange, in die erstellte Datei schreibt:</p>
<pre><code class="language-cpp">os.open(s,std::ios::binary | std::ios::app);
		if((retval=recv(sock,buf2,BUF_SIZ,0))&gt;0)
		{
		os.write(buf2,retval);
		}

		if(os.bad())
		{
			MessageBox(0,&quot;Fehler&quot;,0,0);
		}
</code></pre>
<p>Woran kann das liegen? Kann ich irgendwie überprüfen, wieviele Bytes in die Datei geschrieben wurden und gegebenenfalls die restlichen Bytes noch hinzuschreiben? Rückgabewert von <code>write()</code> ist ja *this, womit ich nicht viel anfangen kann (bin neu).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1973306</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1973306</guid><dc:creator><![CDATA[HELPVISTAWIN7]]></dc:creator><pubDate>Sun, 31 Oct 2010 19:11:57 GMT</pubDate></item><item><title><![CDATA[Reply to std::ostream write() schreibt manchmal zu wenige Bytes in Datei on Sun, 31 Oct 2010 19:38:59 GMT]]></title><description><![CDATA[<p><code>(retval=recv(sock,buf2,BUF_SIZ,0))&gt;0</code> vielleicht ?<br />
versuch mal...</p>
<pre><code class="language-cpp">os.open(s,std::ios::binary | std::ios::app);
retval = recv(sock,buf2,BUF_SIZ,0);
if(retval &gt;= 0)
{
    os.write(buf2,retval);
}

if(os.bad())
{
   MessageBox(0,&quot;Fehler&quot;,0,0);
}
</code></pre>
<p>vvv Guck meine signatur. Das trifft genau zu. (Also, bin mir nicht sicher...) vvv</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1973323</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1973323</guid><dc:creator><![CDATA[lk]]></dc:creator><pubDate>Sun, 31 Oct 2010 19:38:59 GMT</pubDate></item><item><title><![CDATA[Reply to std::ostream write() schreibt manchmal zu wenige Bytes in Datei on Sun, 31 Oct 2010 20:33:30 GMT]]></title><description><![CDATA[<p>HELPVISTAWIN7 schrieb:</p>
<blockquote>
<p>Kann ich irgendwie überprüfen, wieviele Bytes in die Datei geschrieben wurden und gegebenenfalls die restlichen Bytes noch hinzuschreiben? Rückgabewert von <code>write()</code> ist ja *this, womit ich nicht viel anfangen kann (bin neu).</p>
</blockquote>
<p>Der C++-Standard garantiert Dir, dass 'retval' Zeichen in die Datei geschrieben wurden, wenn der Status des Streams nicht auf bad geht - siehe Referenz zu <a href="http://www.cplusplus.com/reference/iostream/ostream/write/" rel="nofollow">write</a>.</p>
<p>bzw. um es programmiertechnisch auszudrücken:</p>
<pre><code class="language-cpp">if((retval=recv(sock,buf2,BUF_SIZ,0))&gt;0)
        {
            if( !os.write(buf2,retval) )
            {
                std::cerr &lt;&lt; &quot;Fehler beim Schreiben in buf2'&quot; &lt;&lt; std::endl;
            }
            // else // hier ist garantiert, dass retval Zeichen geschrieben wurden
        }
</code></pre>
<p>ansonsten wäre ein konkreter Fall hilfreich. Wie sieht die Zeichenfolge aus, die Deiner Meinung nach nicht vollständig geschrieben wird, und wie prüfst Du das?</p>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1973346</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1973346</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Sun, 31 Oct 2010 20:33:30 GMT</pubDate></item><item><title><![CDATA[Reply to std::ostream write() schreibt manchmal zu wenige Bytes in Datei on Mon, 01 Nov 2010 10:13:38 GMT]]></title><description><![CDATA[<p>HELPVISTAWIN7 schrieb:</p>
<blockquote>
<p>Mein Problem ist, dass die Methode write von ofstream <strong>manchmal</strong> nicht alle Bytes, die ich mit <code>recv()</code> (SOCKETS) empfange, in die erstellte Datei schreibt:</p>
</blockquote>
<p>Wie stellst du fest, dass write nicht alle Bytes geschrieben hat? Wenn du dir den Inhalt der Datei ansiehst, ohne den Stream geflusht oder geschlossen zu haben, könnten Bytes im Puffer stecken bzw. verloren gegangen sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1973462</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1973462</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Mon, 01 Nov 2010 10:13:38 GMT</pubDate></item><item><title><![CDATA[Reply to std::ostream write() schreibt manchmal zu wenige Bytes in Datei on Mon, 01 Nov 2010 18:25:06 GMT]]></title><description><![CDATA[<p>manni66 schrieb:</p>
<blockquote>
<p>HELPVISTAWIN7 schrieb:</p>
<blockquote>
<p>Mein Problem ist, dass die Methode write von ofstream <strong>manchmal</strong> nicht alle Bytes, die ich mit <code>recv()</code> (SOCKETS) empfange, in die erstellte Datei schreibt:</p>
</blockquote>
<p>Wie stellst du fest, dass write nicht alle Bytes geschrieben hat? Wenn du dir den Inhalt der Datei ansiehst, ohne den Stream geflusht oder geschlossen zu haben, könnten Bytes im Puffer stecken bzw. verloren gegangen sein.</p>
</blockquote>
<p>Gar nicht. Daher war ja auch meine Frage, wie ich die Anzahl der geschriebenen Bytes herausfindet... Wenn es so ist, dass <code>write()</code> im Falle eines BADBITs <strong>nichts</strong> schreibt, würde ich den Schreibvorgang einfach so lange wiederholen, bis es geklappt hat.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1973742</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1973742</guid><dc:creator><![CDATA[HELPVISTAWIN7]]></dc:creator><pubDate>Mon, 01 Nov 2010 18:25:06 GMT</pubDate></item><item><title><![CDATA[Reply to std::ostream write() schreibt manchmal zu wenige Bytes in Datei on Mon, 01 Nov 2010 18:57:21 GMT]]></title><description><![CDATA[<p>HELPVISTAWIN7 schrieb:</p>
<blockquote>
<p>Wenn es so ist, dass <code>write()</code> im Falle eines BADBITs <strong>nichts</strong> schreibt, würde ich den Schreibvorgang einfach so lange wiederholen, bis es geklappt hat.</p>
</blockquote>
<p>du kannst imho nicht herausbekommen, wie viel geschrieben wurde.<br />
also nicht driekt - du kannsts natürlich mit tellg usw. berechnen.<br />
aber wiederholen bis es klappt ist selten eine gute idee - wenn da was schief geht, wird das seine gründe haben(hdd voll/kaputt - nen anderer fällt mir gerad nicht ein)</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1973761</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1973761</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Mon, 01 Nov 2010 18:57:21 GMT</pubDate></item></channel></rss>