<?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[ifstream und Verzeichnisse?!]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich habe gerade ein sehr interessantes Problem entdeckt beim Öffnen von Verzeichnissen mit ifstream. Das war keine Absicht, sondern ist einem User einer meiner Plugins aufgefallen, als er aus Versehen eine Datei &quot;counters/standard/standard&quot; angelegt hat statt nur &quot;counters/standard&quot;. Das folgende Beispielprogramm läuft unter Debian Sarge mit G++ 3.4 auf folgende Exception:</p>
<pre><code class="language-cpp">terminate called after throwing an instance of 'std::ios_base::failure'
  what():  basic_filebuf::underflow error reading the file
</code></pre>
<p>Der G++ 3.3 unter exakt derselben Konfiguration gibt einen leeren String aus. Beide geben keine Fehlermeldung beim Öffnen. Die Frage ist: Wie <strong>sollte</strong> sich ifstream verhalten?!</p>
<p>&quot;testobjekt&quot; ist ein leeres Verzeichnis.<br />
EDIT: Inhalt in dem Verzeichnis ändert nichts an der Ausgabe &quot;leerer String&quot; unter G++ 3.3</p>
<p>EDIT2: G++ 3.3 linkt gegen libstdc++-5.0.7 und G++ 3.4 gegen libstdc++-6.0.3, falls das hilft.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;string&gt;

using namespace std;

int main()
{
    ifstream f(&quot;testobjekt&quot;);
    if (!f) {
        cerr &lt;&lt; &quot;couldn't open&quot; &lt;&lt; endl;
        return 1;
    }
    string archive_id;
    f &gt;&gt; archive_id;
    f.close();
    cerr &lt;&lt; archive_id &lt;&lt; endl;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/159894/ifstream-und-verzeichnisse</link><generator>RSS for Node</generator><lastBuildDate>Thu, 10 Sep 2026 23:06:51 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/159894.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 19 Sep 2006 20:59:09 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to ifstream und Verzeichnisse?! on Tue, 19 Sep 2006 21:01:55 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich habe gerade ein sehr interessantes Problem entdeckt beim Öffnen von Verzeichnissen mit ifstream. Das war keine Absicht, sondern ist einem User einer meiner Plugins aufgefallen, als er aus Versehen eine Datei &quot;counters/standard/standard&quot; angelegt hat statt nur &quot;counters/standard&quot;. Das folgende Beispielprogramm läuft unter Debian Sarge mit G++ 3.4 auf folgende Exception:</p>
<pre><code class="language-cpp">terminate called after throwing an instance of 'std::ios_base::failure'
  what():  basic_filebuf::underflow error reading the file
</code></pre>
<p>Der G++ 3.3 unter exakt derselben Konfiguration gibt einen leeren String aus. Beide geben keine Fehlermeldung beim Öffnen. Die Frage ist: Wie <strong>sollte</strong> sich ifstream verhalten?!</p>
<p>&quot;testobjekt&quot; ist ein leeres Verzeichnis.<br />
EDIT: Inhalt in dem Verzeichnis ändert nichts an der Ausgabe &quot;leerer String&quot; unter G++ 3.3</p>
<p>EDIT2: G++ 3.3 linkt gegen libstdc++-5.0.7 und G++ 3.4 gegen libstdc++-6.0.3, falls das hilft.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;string&gt;

using namespace std;

int main()
{
    ifstream f(&quot;testobjekt&quot;);
    if (!f) {
        cerr &lt;&lt; &quot;couldn't open&quot; &lt;&lt; endl;
        return 1;
    }
    string archive_id;
    f &gt;&gt; archive_id;
    f.close();
    cerr &lt;&lt; archive_id &lt;&lt; endl;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1140704</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1140704</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Tue, 19 Sep 2006 21:01:55 GMT</pubDate></item><item><title><![CDATA[Reply to ifstream und Verzeichnisse?! on Tue, 19 Sep 2006 21:01:53 GMT]]></title><description><![CDATA[<p>Nabend,</p>
<p>wie sollte es sich denn verhalten? Verzeichnisse sind ja auch nur Dateien, die<br />
du ganz normal oeffnen kannst.</p>
<p>Ich glaube nicht, dass 'ifstream' weiss, dass es ein Verzeichnis geoeffnet hat<br />
(als Datei).</p>
<p>gruss<br />
v R</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1140705</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1140705</guid><dc:creator><![CDATA[virtuell Realisticer]]></dc:creator><pubDate>Tue, 19 Sep 2006 21:01:53 GMT</pubDate></item><item><title><![CDATA[Reply to ifstream und Verzeichnisse?! on Tue, 19 Sep 2006 21:02:50 GMT]]></title><description><![CDATA[<p>virtuell Realisticer schrieb:</p>
<blockquote>
<p>Verzeichnisse sind ja auch nur Dateien, die<br />
du ganz normal oeffnen kannst.</p>
</blockquote>
<p>Kommt auf die Definition an, aber im engeren Sinne mag das stimmen. Demnach sollte er aber zumindest nicht werfen, oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1140706</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1140706</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Tue, 19 Sep 2006 21:02:50 GMT</pubDate></item><item><title><![CDATA[Reply to ifstream und Verzeichnisse?! on Tue, 19 Sep 2006 21:07:51 GMT]]></title><description><![CDATA[<p>LordJaxom schrieb:</p>
<blockquote>
<p>virtuell Realisticer schrieb:</p>
<blockquote>
<p>Verzeichnisse sind ja auch nur Dateien, die<br />
du ganz normal oeffnen kannst.</p>
</blockquote>
<p>Kommt auf die Definition an, aber im engeren Sinne mag das stimmen. Demnach sollte er aber zumindest nicht werfen, oder?</p>
</blockquote>
<p>Nein, das ist keine Definitionssache. In einem Unix-Dateisystem sind Geraete,<br />
Verzeichnisse, symbolische Links oder sockets lediglich Dateien.</p>
<p>Warum er die Exception wirft, kann ich dir allerdings nicht sagen. Vielleicht<br />
liegt es an den Informationen, welche in dem Verzeichnis gespeichert werden. Du<br />
kannst dir das Verzeichnis ja mal mit einem Editor anschauen.</p>
<p>gruss<br />
v R</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1140709</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1140709</guid><dc:creator><![CDATA[virtuell Realisticer]]></dc:creator><pubDate>Tue, 19 Sep 2006 21:07:51 GMT</pubDate></item><item><title><![CDATA[Reply to ifstream und Verzeichnisse?! on Tue, 19 Sep 2006 21:13:36 GMT]]></title><description><![CDATA[<p>virtuell Realisticer schrieb:</p>
<blockquote>
<p>In einem Unix-Dateisystem sind Geraete,<br />
Verzeichnisse, symbolische Links oder sockets lediglich Dateien.</p>
</blockquote>
<p>Das ist mir klar.</p>
<blockquote>
<p>Warum er die Exception wirft, kann ich dir allerdings nicht sagen. Vielleicht<br />
liegt es an den Informationen, welche in dem Verzeichnis gespeichert werden. Du<br />
kannst dir das Verzeichnis ja mal mit einem Editor anschauen.</p>
</blockquote>
<p>Insofern ist es doch Definitionssache, weil jeder Editor mit dem ich es probiere mir sagt &quot;das ist keine Datei, das ist ein Verzeichnis&quot; <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="😉"
    /> - wenn auch vermutlich weil dieser Fall abgefangen wird.</p>
<p>Fakt ist eben dass dasselbe System (mit parallel installiertem 3.3 und 3.4) unterschiedliche Ergebnisse mit ifstream liefert. Werde morgen auf der Arbeit mal einen Versuch mit VC++8 starten. Interessieren würde mich halt was der Standard (wenn überhaupt) da gebietet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1140712</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1140712</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Tue, 19 Sep 2006 21:13:36 GMT</pubDate></item></channel></rss>