<?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[Korrektes Schreiben in eine Datei und Lesen aus einer Datei]]></title><description><![CDATA[<p>Guten Tag, prinzipiell bin ich ja mit filestreams vertraut, aber um die Fehler habe ich mich noch nicht so wirklich gekümmert. Wie schreibe ich richtig in eine Datei, wie lese ich richtig?</p>
<p>Hier mal ein Beispiel, wie ich das Schreiben machen würde:</p>
<pre><code class="language-cpp">std::ofstream os(&quot;bla.blubb&quot;);

while(os &lt;&lt; some_stuff);

if(!os.good())
    // Schreibfehler

os &lt;&lt; std::flush;

if(!os.good())
    // Schreibfehler
</code></pre>
<p>Und hier mal das Lesen:</p>
<pre><code class="language-cpp">std::ifstream is(&quot;bla.blubb&quot;);

while(is &gt;&gt; somevar);

if(!is.good())
  // Lesefehler
</code></pre>
<p>Ist das so korrekt? Gibt es einfachere Varianten?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/286581/korrektes-schreiben-in-eine-datei-und-lesen-aus-einer-datei</link><generator>RSS for Node</generator><lastBuildDate>Thu, 20 Aug 2026 19:07:56 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/286581.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 12 May 2011 14:21:19 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Korrektes Schreiben in eine Datei und Lesen aus einer Datei on Thu, 12 May 2011 14:21:19 GMT]]></title><description><![CDATA[<p>Guten Tag, prinzipiell bin ich ja mit filestreams vertraut, aber um die Fehler habe ich mich noch nicht so wirklich gekümmert. Wie schreibe ich richtig in eine Datei, wie lese ich richtig?</p>
<p>Hier mal ein Beispiel, wie ich das Schreiben machen würde:</p>
<pre><code class="language-cpp">std::ofstream os(&quot;bla.blubb&quot;);

while(os &lt;&lt; some_stuff);

if(!os.good())
    // Schreibfehler

os &lt;&lt; std::flush;

if(!os.good())
    // Schreibfehler
</code></pre>
<p>Und hier mal das Lesen:</p>
<pre><code class="language-cpp">std::ifstream is(&quot;bla.blubb&quot;);

while(is &gt;&gt; somevar);

if(!is.good())
  // Lesefehler
</code></pre>
<p>Ist das so korrekt? Gibt es einfachere Varianten?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2062275</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2062275</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Thu, 12 May 2011 14:21:19 GMT</pubDate></item><item><title><![CDATA[Reply to Korrektes Schreiben in eine Datei und Lesen aus einer Datei on Thu, 12 May 2011 14:53:04 GMT]]></title><description><![CDATA[<p>Wenn du dir den Fehler nicht ausgeben lassen willst, dann kannst du das auch so schreiben, weil der Block der <code>while</code> -Schleife im Moment leer ist (ist vieleicht eine Geschmackssache):</p>
<pre><code class="language-cpp">do 
{
    os &lt;&lt; some_stuff
} 
while(os.good());
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2062287</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2062287</guid><dc:creator><![CDATA[*Rewind*]]></dc:creator><pubDate>Thu, 12 May 2011 14:53:04 GMT</pubDate></item><item><title><![CDATA[Reply to Korrektes Schreiben in eine Datei und Lesen aus einer Datei on Thu, 12 May 2011 14:56:11 GMT]]></title><description><![CDATA[<p>Geht darum, dass ich über alle Fehler benachrichtigt werden möchte <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2062289</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2062289</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Thu, 12 May 2011 14:56:11 GMT</pubDate></item><item><title><![CDATA[Reply to Korrektes Schreiben in eine Datei und Lesen aus einer Datei on Thu, 12 May 2011 15:52:27 GMT]]></title><description><![CDATA[<p>314159265358979 schrieb:</p>
<blockquote>
<p>Geht darum, dass ich über alle Fehler benachrichtigt werden möchte <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
</blockquote>
<p>Du kannst dir auch exceptions werfen lassen. Dann brauchst du den normalen Code nicht so verunstalten, sondern kannst die Fehlerbehandlung auslagern:<br />
<a href="http://www.cplusplus.com/reference/iostream/ios/exceptions/" rel="nofollow">http://www.cplusplus.com/reference/iostream/ios/exceptions/</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2062313</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2062313</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 12 May 2011 15:52:27 GMT</pubDate></item><item><title><![CDATA[Reply to Korrektes Schreiben in eine Datei und Lesen aus einer Datei on Thu, 12 May 2011 15:54:00 GMT]]></title><description><![CDATA[<p>Ich steh nicht so auf Exceptions, die wirken auf mich irgendwie Performancetechnisch mies - kann aber auch sein dass ich da gerade Blödsinn rede - ich weiß es nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2062317</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2062317</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Thu, 12 May 2011 15:54:00 GMT</pubDate></item><item><title><![CDATA[Reply to Korrektes Schreiben in eine Datei und Lesen aus einer Datei on Thu, 12 May 2011 15:56:59 GMT]]></title><description><![CDATA[<p>314159265358979 schrieb:</p>
<blockquote>
<p>...kann aber auch sein dass ich da gerade Blödsinn rede...</p>
</blockquote>
<p>Ja, tust Du ;). Gerade bei Streams dürfte sich die minimale Overhead den Exception vermeintlich mit sich bringen nicht ins Gewicht fallen. Mal ganz davon abgesehen kostet die manuelle Fehlerbahndlung auch...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2062318</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2062318</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Thu, 12 May 2011 15:56:59 GMT</pubDate></item><item><title><![CDATA[Reply to Korrektes Schreiben in eine Datei und Lesen aus einer Datei on Thu, 12 May 2011 16:19:26 GMT]]></title><description><![CDATA[<p>Nur ein Hinweis: !is.good() trifft auch auf das Dateiende zu. Wenn du das von Eingabefehlern unterscheiden willst, solltest du is.bad() verwenden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2062345</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2062345</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 12 May 2011 16:19:26 GMT</pubDate></item><item><title><![CDATA[Reply to Korrektes Schreiben in eine Datei und Lesen aus einer Datei on Thu, 12 May 2011 16:29:09 GMT]]></title><description><![CDATA[<p>314159265358979 schrieb:</p>
<blockquote>
<p>Ich steh nicht so auf Exceptions, die wirken auf mich irgendwie Performancetechnisch mies - kann aber auch sein dass ich da gerade Blödsinn rede - ich weiß es nicht.</p>
</blockquote>
<p>Exceptions selbst bringen bei einem guten Compiler (g++) keinen Overhead mit sich, das Werfen im Stream IMHO auch nicht (irgendwo muss ja getestet werden).</p>
<p>Was hingegen performancetechnisch mies ist, ist der C++-Stream. Wenn du auf Geschwindigkeit aus bist, musst du dir einen FILE*-Wrapper basteln.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2062355</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2062355</guid><dc:creator><![CDATA[fDuJ2]]></dc:creator><pubDate>Thu, 12 May 2011 16:29:09 GMT</pubDate></item><item><title><![CDATA[Reply to Korrektes Schreiben in eine Datei und Lesen aus einer Datei on Thu, 12 May 2011 16:58:28 GMT]]></title><description><![CDATA[<p>fDuJ2 schrieb:</p>
<blockquote>
<p>314159265358979 schrieb:</p>
<blockquote>
<p>Ich steh nicht so auf Exceptions, die wirken auf mich irgendwie Performancetechnisch mies - kann aber auch sein dass ich da gerade Blödsinn rede - ich weiß es nicht.</p>
</blockquote>
<p>Exceptions selbst bringen bei einem guten Compiler (g++) keinen Overhead mit sich, das Werfen im Stream IMHO auch nicht (irgendwo muss ja getestet werden).</p>
<p>Was hingegen performancetechnisch mies ist, ist der C++-Stream. Wenn du auf Geschwindigkeit aus bist, musst du dir einen FILE*-Wrapper basteln.</p>
</blockquote>
<p>Warum sollten die C++-Streams performancetechnisch mies sein? Das kann ich nicht bestätigen.</p>
<p>Bei einem SJLJ-Compiler (üblicher) bringen AFAIK sowohl ein try{}-Block als auch das Werfen einen kleinen Overhead mit sich, welcher den einer ständigen Abfrage allerdings kaum übersteigen sollte. Ein Dwarf2-Compiler hat dagegen bei try{}-Blöcken keinen Overhead, ist allerdings auch nicht auf allen Systemen verfügbar. Beide Versionen sind etwa beim TDM-GCC verfügbar.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2062373</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2062373</guid><dc:creator><![CDATA[wxSkip]]></dc:creator><pubDate>Thu, 12 May 2011 16:58:28 GMT</pubDate></item><item><title><![CDATA[Reply to Korrektes Schreiben in eine Datei und Lesen aus einer Datei on Thu, 12 May 2011 17:09:03 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>solltest du is.bad() verwenden.</p>
</blockquote>
<p>Bei einem <code>fail()</code> wird doch <code>bad()</code> nicht gesetzt, oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2062381</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2062381</guid><dc:creator><![CDATA[EOutOfResources]]></dc:creator><pubDate>Thu, 12 May 2011 17:09:03 GMT</pubDate></item><item><title><![CDATA[Reply to Korrektes Schreiben in eine Datei und Lesen aus einer Datei on Thu, 12 May 2011 17:13:00 GMT]]></title><description><![CDATA[<p>EOutOfResources schrieb:</p>
<blockquote>
<p>CStoll schrieb:</p>
<blockquote>
<p>solltest du is.bad() verwenden.</p>
</blockquote>
<p>Bei einem <code>fail()</code> wird doch <code>bad()</code> nicht gesetzt, oder?</p>
</blockquote>
<p>Punkt für dich, mein Fehler (meine C++ Zeit ist doch schon zu lange her, um mir <strong>alle</strong> Details zu merken).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2062385</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2062385</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 12 May 2011 17:13:00 GMT</pubDate></item><item><title><![CDATA[Reply to Korrektes Schreiben in eine Datei und Lesen aus einer Datei on Thu, 12 May 2011 21:21:41 GMT]]></title><description><![CDATA[<p>314159265358979 schrieb:</p>
<blockquote>
<p>Wie schreibe ich richtig in eine Datei, wie lese ich richtig?</p>
</blockquote>
<p>Du schreibst richtig, indem Du ganz normal einfach schreibst und am Ende das fail-Bit abfragst. Also mit</p>
<pre><code class="language-cpp">ofstream out(&quot;bla.blubb&quot;);
    out &lt;&lt; ...; // alles mögliche
    if( !out ) { // ist identisch mit: if( out.fail() ) {
        cerr &lt;&lt; &quot;Fehler beim Schreiben&quot; &lt;&lt; endl;
</code></pre>
<p>tritt kein Fehler auf, so kannst Du sicher sein, dass alle Daten im unterliegenden streambuf angekommen sind. Sicherer wäre es, vor der Prüfung noch einen sync aufzurufen :</p>
<pre><code class="language-cpp">ofstream out(&quot;bla.blubb&quot;);
    out &lt;&lt; ...; // alles mögliche
    if( !(out &lt;&lt; std::flush) ) {
        cerr &lt;&lt; &quot;Fehler beim Schreiben&quot; &lt;&lt; endl;
</code></pre>
<p>Der sync soll die Zeichen, die evt. noch im streambuf gespeichert sind, in das Device schreiben. Mehr kannst Du nicht machen, auch ein close macht meines Wissens nicht mehr.</p>
<p>Beim Lesen ist es genauso - Lesen und anschließend auf fail-Bit prüfen. Ist es nicht gesetzt, sollten alles bis dahin korrekt gelesen sein.</p>
<pre><code class="language-cpp">ifstream in(&quot;bla.blubb&quot;);
    in &gt;&gt; ... ; // alles lesen
    if( !in ) {
        cerr &lt;&lt; &quot;Fehler beim Lesen&quot; &lt;&lt; endl;
</code></pre>
<p>im Unterschied zum Schreiben, kann es beim Lesen vorkommen, dass das EOF-Bit gesetzt ist, aber das Fail-Bit nicht - am Ende der Datei. Deshalb wäre ein</p>
<pre><code class="language-cpp">if( !in.good() ) {
</code></pre>
<p>nach dem Lesen schlicht ein Fehler.</p>
<p>Das Fail-Bit wird immer gesetzt, egal welcher Art der aufgetretene Fehler ist. Das Fail-Bit wird i.A. von den <a href="http://www.cplusplus.com/reference/iostream/istream/operator%3E%3E/" rel="nofollow">Extratoren</a> gesetzt, wenn z.B. ein Formatfehler auftritt. Das Bad-Bit wird gesetzt, wenn der Streambuf eine Exception wirft. Der Stream fängt sie (wenn <a href="http://www.cplusplus.com/reference/iostream/ios/exceptions/" rel="nofollow">nicht anders eingestellt</a>) und setzt das Bad-Bit. stream.fail() liefert in jedem Fall 'true'.</p>
<p>Es versteht sich von selbst, dass zuerst gelesen wird und dann das Fail-Bit geprüft wird - und nicht <a href="http://www.c-plusplus.net/forum/p2042572#2042572" rel="nofollow">wie durchaus üblich</a> umgekehrt. <a href="http://www.c-plusplus.net/forum/p2029783#2029783" rel="nofollow">.. noch ein Beispiel</a>.</p>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2062538</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2062538</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Thu, 12 May 2011 21:21:41 GMT</pubDate></item><item><title><![CDATA[Reply to Korrektes Schreiben in eine Datei und Lesen aus einer Datei on Mon, 16 May 2011 19:44:51 GMT]]></title><description><![CDATA[<p>Vielen Dank, habe meinen Thread etwas aus den Augen verloren. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2064308</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2064308</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Mon, 16 May 2011 19:44:51 GMT</pubDate></item></channel></rss>