<?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[ofstream | Auch prüfen beim schließen?]]></title><description><![CDATA[<p>Folgendes, wenn ich jetzt einen stream erstelle, also z.B.:</p>
<pre><code class="language-cpp">ofstream file;
file.open(&quot;D:\Buch.txt&quot;);
</code></pre>
<p>dann prüft man danach immer gleich ob es verbunden ist oder ob irgendwelche Komplikationen aufgetaucht sind:</p>
<pre><code class="language-cpp">if(file) cout &lt;&lt; &quot;Okay!\n&quot;;
else cout &lt;&lt; &quot;Error!\n&quot;;
</code></pre>
<p>So, wie sieht das jetzt aber beim schließen aus, - also bei file.close() - gibts da auch eine Möglich keit zu prüfen, oder prüft man da einfach gar nicht, weil dass immer gut geht?<br />
Oder macht man da auch wieder sowas wie oben if(file)....?</p>
<p>MfG<br />
Stromberg</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/201607/ofstream-auch-prüfen-beim-schließen</link><generator>RSS for Node</generator><lastBuildDate>Tue, 06 Oct 2026 05:02:44 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/201607.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 02 Jan 2008 00:21:18 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to ofstream | Auch prüfen beim schließen? on Wed, 02 Jan 2008 00:21:34 GMT]]></title><description><![CDATA[<p>Folgendes, wenn ich jetzt einen stream erstelle, also z.B.:</p>
<pre><code class="language-cpp">ofstream file;
file.open(&quot;D:\Buch.txt&quot;);
</code></pre>
<p>dann prüft man danach immer gleich ob es verbunden ist oder ob irgendwelche Komplikationen aufgetaucht sind:</p>
<pre><code class="language-cpp">if(file) cout &lt;&lt; &quot;Okay!\n&quot;;
else cout &lt;&lt; &quot;Error!\n&quot;;
</code></pre>
<p>So, wie sieht das jetzt aber beim schließen aus, - also bei file.close() - gibts da auch eine Möglich keit zu prüfen, oder prüft man da einfach gar nicht, weil dass immer gut geht?<br />
Oder macht man da auch wieder sowas wie oben if(file)....?</p>
<p>MfG<br />
Stromberg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1429040</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1429040</guid><dc:creator><![CDATA[Stromberg]]></dc:creator><pubDate>Wed, 02 Jan 2008 00:21:34 GMT</pubDate></item><item><title><![CDATA[Reply to ofstream | Auch prüfen beim schließen? on Wed, 02 Jan 2008 01:20:41 GMT]]></title><description><![CDATA[<p>Hi Stromberg,</p>
<p><a href="http://www.cplusplus.com/reference/iostream/ofstream/close.html" rel="nofollow">http://www.cplusplus.com/reference/iostream/ofstream/close.html</a></p>
<blockquote>
<p>On failure, the failbit internal state flag is set (which can be checked with member fail), and depending on the value set with exception an exception may be thrown.</p>
</blockquote>
<p>if(file) überprüft ja dieses failbit<br />
--&gt; Die Überprüfung ist sinnvoll,</p>
<blockquote>
<p>The function fails if no file is currently open (associated) with this object.</p>
</blockquote>
<p>Wenn die Datei definitv geöffnet ist, kannst du dir die Abfrage scheinbar<br />
sparen.</p>
<p>bezüglich der Exception:</p>
<p><a href="http://www.cplusplus.com/reference/iostream/ios/exceptions.html" rel="nofollow">http://www.cplusplus.com/reference/iostream/ios/exceptions.html</a></p>
<p>Gruß,<br />
CSpille</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1429053</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1429053</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Wed, 02 Jan 2008 01:20:41 GMT</pubDate></item><item><title><![CDATA[Reply to ofstream | Auch prüfen beim schließen? on Wed, 02 Jan 2008 10:52:36 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">if (file)
</code></pre>
<p>Dabei nutzt du operator void* (<a href="http://www.cplusplus.com/reference/iostream/ios/operator_voidpt.html" rel="nofollow">http://www.cplusplus.com/reference/iostream/ios/operator_voidpt.html</a>) um zu gucken, ob der Stream in Ordnung ist. Wenn das fail- oder badbit gesetzt ist, gibt der operator void* von std::ios (std::fstream erbt davon) NULL zurück.</p>
<pre><code class="language-cpp">if (!file)
</code></pre>
<p>So nutzt du operator! (<a href="http://www.cplusplus.com/reference/iostream/ios/operatornot.html" rel="nofollow">http://www.cplusplus.com/reference/iostream/ios/operatornot.html</a>), der, wenn fail- und/oder badbit gesetzt sind, true zurück gibt, sonst false.<br />
So kannst du direkt auf &quot;Fehlschlag&quot; testen.</p>
<p>Durch <a href="http://www.cplusplus.com/reference/iostream/ios_base/register_callback.html" rel="nofollow">http://www.cplusplus.com/reference/iostream/ios_base/register_callback.html</a> sollte std::fstream::close mit dem Destruktor <a href="http://www.cplusplus.com/reference/iostream/ios_base/~ios_base.html" rel="nofollow">http://www.cplusplus.com/reference/iostream/ios_base/~ios_base.html</a> verknüpft sein und somit den Stream schließen.</p>
<p>&lt;a href= schrieb:</p>
<blockquote>
<p><a href="http://www.cplusplus.com/reference/iostream/fstream/close.html" rel="nofollow">http://www.cplusplus.com/reference/iostream/fstream/close.html</a>&quot;&gt;The function fails if no file is currently open (associated) with this object.</p>
</blockquote>
<p>Da die Funktion aber als Rückgabetyp void hat, gehe ich davon aus, dass Exceptions gemeint sind.<br />
Hab jetzt nichts genaueres gefunden. Es wird halt vom assoziierten Stream-Buffer (<a href="http://www.dinkumware.com/manuals/default.aspx?manual=compleat&amp;page=fstream.html#basic_filebuf" rel="nofollow">http://www.dinkumware.com/manuals/default.aspx?manual=compleat&amp;page=fstream.html#basic_filebuf</a>) die Funktion close aufgerufen, die halt this zurückgibt, wenn Sie erfolgreich war. Im Fehlerfall NULL. <a href="http://www.dinkumware.com/manuals/default.aspx?manual=compleat&amp;page=fstream.html#basic_filebuf::close" rel="nofollow">http://www.dinkumware.com/manuals/default.aspx?manual=compleat&amp;page=fstream.html#basic_filebuf::close</a><br />
Von d.h. wird das wahrscheinlich durch sowas getestet:</p>
<pre><code class="language-cpp">void basic_fstream&lt;_Type&gt;::close()
{
    if (&amp;m_buffer != m_buffer.close()) throw std::basic_iostream::exception;
}
</code></pre>
<p>Welche Exception jetzt genau ... weiß icht nicht ... probier es einfach aus! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Aber normal brauchst du dich garnicht um das alles kümmern:</p>
<pre><code class="language-cpp">{
    std::ofstream file_stream(&quot;D:\\Buch.txt&quot;); 
} // file_stream destruktor wird aufgerufen (da Scope zu ende) und ggf. close aufgerufen.
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1429161</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1429161</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Wed, 02 Jan 2008 10:52:36 GMT</pubDate></item><item><title><![CDATA[Reply to ofstream | Auch prüfen beim schließen? on Wed, 02 Jan 2008 16:07:32 GMT]]></title><description><![CDATA[<p>Also folgendes müsste doch dann auch möglich sein:</p>
<pre><code class="language-cpp">fstream object;
void *p;
p=reintrepret_cast&lt;void*&gt;(&amp;object);
if(p) cout &lt;&lt; &quot;Flags set\n&quot;; //one of the error flags (failbit or badbit) is set
else cout &lt;&lt; &quot;no Error Flag is set&quot;;
</code></pre>
<p>Kann ich mir das so vorstellen!?<br />
MfG<br />
Stromberg</p>
<p>angelehnt an den link: <a href="http://www.cplusplus.com/reference/iostream/ios/operator_voidpt.html" rel="nofollow">http://www.cplusplus.com/reference/iostream/ios/operator_voidpt.html</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1429425</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1429425</guid><dc:creator><![CDATA[Stromberg]]></dc:creator><pubDate>Wed, 02 Jan 2008 16:07:32 GMT</pubDate></item><item><title><![CDATA[Reply to ofstream | Auch prüfen beim schließen? on Wed, 02 Jan 2008 16:53:07 GMT]]></title><description><![CDATA[<p>Damit führst Du eine Umwandlung von fstream* nach void* durch, nicht von fstream nach void*. Das sind zwei unterschiedliche paar Schuhe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1429454</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1429454</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Wed, 02 Jan 2008 16:53:07 GMT</pubDate></item><item><title><![CDATA[Reply to ofstream | Auch prüfen beim schließen? on Wed, 02 Jan 2008 19:01:01 GMT]]></title><description><![CDATA[<p>Wie würde der Code dann richtig heißen?<br />
MfG<br />
Stromberg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1429539</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1429539</guid><dc:creator><![CDATA[Stromberg]]></dc:creator><pubDate>Wed, 02 Jan 2008 19:01:01 GMT</pubDate></item><item><title><![CDATA[Reply to ofstream | Auch prüfen beim schließen? on Wed, 02 Jan 2008 19:38:23 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">fstream object; 
void *p; 
p = object; 
if(p) cout &lt;&lt; &quot;Flags set\n&quot;; //one of the error flags (failbit or badbit) is set 
else cout &lt;&lt; &quot;no Error Flag is set&quot;;
</code></pre>
<p>Dies funktioniert jedenfalls bei mingw/gcc.<br />
Allerdings muss es if(!p) heißen, da bei einem gesetzten Error-Flag NULL zurückgegeben wird. (Wie (D)evil schon sagte)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1429552</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1429552</guid><dc:creator><![CDATA[The-Kenny]]></dc:creator><pubDate>Wed, 02 Jan 2008 19:38:23 GMT</pubDate></item><item><title><![CDATA[Reply to ofstream | Auch prüfen beim schließen? on Wed, 02 Jan 2008 19:51:26 GMT]]></title><description><![CDATA[<p>Aber in dem Link stand doch irgendwas mit &quot;casten&quot;:</p>
<blockquote>
<p>A stream object derived from ios can be casted to a pointer.</p>
</blockquote>
<p><a href="http://www.cplusplus.com/reference/iostream/ios/operator_voidpt.html" rel="nofollow">http://www.cplusplus.com/reference/iostream/ios/operator_voidpt.html</a><br />
Oder was ist damit gemeint?<br />
MfG<br />
Stromberg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1429562</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1429562</guid><dc:creator><![CDATA[Stromberg]]></dc:creator><pubDate>Wed, 02 Jan 2008 19:51:26 GMT</pubDate></item><item><title><![CDATA[Reply to ofstream | Auch prüfen beim schließen? on Wed, 02 Jan 2008 23:11:30 GMT]]></title><description><![CDATA[<p>Hmm <a href="http://www.google.com/search?hl=en&amp;q=C%2B%2B+overloading+type+cast+operator&amp;btnG=Search" rel="nofollow">http://www.google.com/search?hl=en&amp;q=C%2B%2B+overloading+type+cast+operator&amp;btnG=Search</a><br />
schonmal was von type cast operator gehört? Es kümmert sich darum, dass du für einen bestimmten Typ das casten in diesen erlauben kannst. D.h. ist hier die implizite Umwandlung möglich &amp; io.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1429639</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1429639</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Wed, 02 Jan 2008 23:11:30 GMT</pubDate></item><item><title><![CDATA[Reply to ofstream | Auch prüfen beim schließen? on Thu, 03 Jan 2008 01:37:28 GMT]]></title><description><![CDATA[<p>(D)Evil schrieb:</p>
<blockquote>
<p>Durch <a href="http://www.cplusplus.com/reference/iostream/ios_base/register_callback.html" rel="nofollow">http://www.cplusplus.com/reference/iostream/ios_base/register_callback.html</a> sollte std::fstream::close mit dem Destruktor <a href="http://www.cplusplus.com/reference/iostream/ios_base/~ios_base.html" rel="nofollow">http://www.cplusplus.com/reference/iostream/ios_base/~ios_base.html</a> verknüpft sein und somit den Stream schließen.</p>
<p>&lt;a href= schrieb:</p>
<blockquote>
<p><a href="http://www.cplusplus.com/reference/iostream/fstream/close.html" rel="nofollow">http://www.cplusplus.com/reference/iostream/fstream/close.html</a>&quot;&gt;The function fails if no file is currently open (associated) with this object.</p>
</blockquote>
<p>Da die Funktion aber als Rückgabetyp void hat, gehe ich davon aus, dass Exceptions gemeint sind.<br />
Hab jetzt nichts genaueres gefunden. Es wird halt vom assoziierten Stream-Buffer (<a href="http://www.dinkumware.com/manuals/default.aspx?manual=compleat&amp;page=fstream.html#basic_filebuf" rel="nofollow">http://www.dinkumware.com/manuals/default.aspx?manual=compleat&amp;page=fstream.html#basic_filebuf</a>) die Funktion close aufgerufen, die halt this zurückgibt, wenn Sie erfolgreich war. Im Fehlerfall NULL. <a href="http://www.dinkumware.com/manuals/default.aspx?manual=compleat&amp;page=fstream.html#basic_filebuf::close" rel="nofollow">http://www.dinkumware.com/manuals/default.aspx?manual=compleat&amp;page=fstream.html#basic_filebuf::close</a><br />
Von d.h. wird das wahrscheinlich durch sowas getestet:</p>
<pre><code class="language-cpp">void basic_fstream&lt;_Type&gt;::close()
{
    if (&amp;m_buffer != m_buffer.close()) throw std::basic_iostream::exception;
}
</code></pre>
<p>Welche Exception jetzt genau ... weiß icht nicht ... probier es einfach aus! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
</blockquote>
<p>die exception, die geworfen wird, ist ios_base::failure. die wird allerdings auch nur gerufen, wenn du zuvor exceptions aktiviert hast - und zwar mit:</p>
<pre><code class="language-cpp">stream.exceptions (ios_base::failbit)
</code></pre>
<p>ansonsten wird einfach nur das failbit gesetzt.</p>
<p>und besser noch: wenn man nicht close aufruft, sondern den destruktor von fstream die aufräumarbeiten übernehmen lässt, wird nicht einmal eine exception geworfen. (exceptions in destruktoren sind böse)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1429681</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1429681</guid><dc:creator><![CDATA[queer_boy]]></dc:creator><pubDate>Thu, 03 Jan 2008 01:37:28 GMT</pubDate></item><item><title><![CDATA[Reply to ofstream | Auch prüfen beim schließen? on Thu, 03 Jan 2008 09:15:51 GMT]]></title><description><![CDATA[<p><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>Aber normal brauchst du dich garnicht um das alles kümmern:</p>
<pre><code class="language-cpp">{
    std::ofstream file_stream(&quot;D:\\Buch.txt&quot;);
} // file_stream destruktor wird aufgerufen (da Scope zu ende) und ggf. close aufgerufen.
</code></pre>
</blockquote>
<p><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/1429739</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1429739</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Thu, 03 Jan 2008 09:15:51 GMT</pubDate></item><item><title><![CDATA[Reply to ofstream | Auch prüfen beim schließen? on Thu, 03 Jan 2008 10:26:26 GMT]]></title><description><![CDATA[<p>Was ist denn wenn beim Schließen festgestellt wird, dass der noch nicht vollständig weggeschriebene Puffer nicht mehr geschrieben werden kann? Ich nehme doch mal an, dann würde auch beim close ein failbit gesetzt werden, welches zu überprüfen durchaus Sinn machen würde, oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1429790</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1429790</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Thu, 03 Jan 2008 10:26:26 GMT</pubDate></item><item><title><![CDATA[Reply to ofstream | Auch prüfen beim schließen? on Thu, 03 Jan 2008 14:39:30 GMT]]></title><description><![CDATA[<p>Ja, das macht Sinn und wenn man denselben Stream wiederöffnen will, so sollte man vorher die Statusflags wieder löschen (sonst erlebt man eine unangenehme Überraschung - Datei kann nicht geöffnet werden, obwohl vorhanden):</p>
<pre><code class="language-cpp">fstream f(&quot;datei&quot;);
...
f.close();

f.clear(); // wichtig hier

f.open(&quot;datei2&quot;);
...
f.close();
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1430018</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1430018</guid><dc:creator><![CDATA[Th]]></dc:creator><pubDate>Thu, 03 Jan 2008 14:39:30 GMT</pubDate></item></channel></rss>