<?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[Dateien in einer while schleife via readdir + f.open auslesen]]></title><description><![CDATA[<pre><code class="language-cpp">#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;ctype.h&gt;
#include &lt;string.h&gt;
#include &lt;dirent.h&gt;

using namespace std;

int main()
{
    DIR *ptr;
    dirent *ptrx;
    size_t finden;
    fstream f;
    char nPfad[20];
    char *Dateiname;
    string nDateiname = &quot;&quot;;
    string Endung = &quot;.txt&quot;;
    string GesammtPfad = &quot;&quot;;
    string Zeile = &quot;&quot;;
    string Wort = &quot;Apfel&quot;;
    string Pfad = &quot;E:\\Woerter&quot;;
    const char *Pfadptr;

    cin &gt;&gt; nPfad;

    ptr = opendir(nPfad);

    while(ptrx = readdir(ptr))
    {
        Dateiname = ptrx-&gt;d_name;
        nDateiname = Dateiname;
        finden = nDateiname.find(Endung);
        if(finden != string::npos)
        {
            GesammtPfad = Pfad + &quot;\\&quot; + nDateiname;
            Pfadptr = GesammtPfad.c_str();
            cout &lt;&lt; Pfadptr &lt;&lt; endl;
            f.open(Pfadptr, ios::in);
            getline(f, Zeile);
            cout &lt;&lt; Zeile &lt;&lt; endl;
            while(!f.eof())
            {
                getline(f, Zeile);
                cout &lt;&lt; Zeile &lt;&lt; endl;
            }
            f.seekg(0);
        }
    }

    return 0;
}
</code></pre>
<p>So und mein output fenster zeigt mir das und ich weiß leider nicht warum <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /><br />
<a href="http://anthek.de/images-i3623bqjl8c.jpg" rel="nofollow">http://anthek.de/images-i3623bqjl8c.jpg</a><br />
Wer nicht auf den link drücken will:<br />
Es zeigt mir immer wieder (Zeile 44) das letzte Wort aus der ersten Datei an, weshalb meine darauf folgende while-schleife nicht anspringt weil die !eof-Bedingung nicht erfüllt ist.<br />
Meine Frage ist wie ich das lösen kann damit es mir die Wörter aus den andern 2 Dateien anzeigt?<br />
Falls was komplett falsch ist tuts mir Leid ich bin nicht so bewandert in diesem Bereich <sup>_</sup></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/304608/dateien-in-einer-while-schleife-via-readdir-f-open-auslesen</link><generator>RSS for Node</generator><lastBuildDate>Sun, 09 Aug 2026 10:04:05 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/304608.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 10 Jun 2012 13:27:01 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Dateien in einer while schleife via readdir + f.open auslesen on Sun, 10 Jun 2012 13:27:01 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;ctype.h&gt;
#include &lt;string.h&gt;
#include &lt;dirent.h&gt;

using namespace std;

int main()
{
    DIR *ptr;
    dirent *ptrx;
    size_t finden;
    fstream f;
    char nPfad[20];
    char *Dateiname;
    string nDateiname = &quot;&quot;;
    string Endung = &quot;.txt&quot;;
    string GesammtPfad = &quot;&quot;;
    string Zeile = &quot;&quot;;
    string Wort = &quot;Apfel&quot;;
    string Pfad = &quot;E:\\Woerter&quot;;
    const char *Pfadptr;

    cin &gt;&gt; nPfad;

    ptr = opendir(nPfad);

    while(ptrx = readdir(ptr))
    {
        Dateiname = ptrx-&gt;d_name;
        nDateiname = Dateiname;
        finden = nDateiname.find(Endung);
        if(finden != string::npos)
        {
            GesammtPfad = Pfad + &quot;\\&quot; + nDateiname;
            Pfadptr = GesammtPfad.c_str();
            cout &lt;&lt; Pfadptr &lt;&lt; endl;
            f.open(Pfadptr, ios::in);
            getline(f, Zeile);
            cout &lt;&lt; Zeile &lt;&lt; endl;
            while(!f.eof())
            {
                getline(f, Zeile);
                cout &lt;&lt; Zeile &lt;&lt; endl;
            }
            f.seekg(0);
        }
    }

    return 0;
}
</code></pre>
<p>So und mein output fenster zeigt mir das und ich weiß leider nicht warum <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /><br />
<a href="http://anthek.de/images-i3623bqjl8c.jpg" rel="nofollow">http://anthek.de/images-i3623bqjl8c.jpg</a><br />
Wer nicht auf den link drücken will:<br />
Es zeigt mir immer wieder (Zeile 44) das letzte Wort aus der ersten Datei an, weshalb meine darauf folgende while-schleife nicht anspringt weil die !eof-Bedingung nicht erfüllt ist.<br />
Meine Frage ist wie ich das lösen kann damit es mir die Wörter aus den andern 2 Dateien anzeigt?<br />
Falls was komplett falsch ist tuts mir Leid ich bin nicht so bewandert in diesem Bereich <sup>_</sup></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2221696</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2221696</guid><dc:creator><![CDATA[Sebastian S.]]></dc:creator><pubDate>Sun, 10 Jun 2012 13:27:01 GMT</pubDate></item><item><title><![CDATA[Reply to Dateien in einer while schleife via readdir + f.open auslesen on Sun, 10 Jun 2012 13:44:06 GMT]]></title><description><![CDATA[<p>Der Stream ist nach dem eof noch im Fehlerzustand. Daher schlagen alle Leseaktionen fehl.</p>
<p>Technisch korrekte Antwort: Fehlerstatus mit clear aufheben<br />
Hilfreiche Antwort: Filestreams nicht wiederverwenden. Macht fast nie Sinn. so auch hier. Einfach jeweils ein neues Streamobjekt in deiner Schleife erstellen.</p>
<p>P.S.: Du scheinst zwar C++ machen zu wollen, programmierst aber in einem Stil, der selbst in C als alt gelten würde. Vermutlich schlechtes Lehrmaterial.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2221704</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2221704</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sun, 10 Jun 2012 13:44:06 GMT</pubDate></item><item><title><![CDATA[Reply to Dateien in einer while schleife via readdir + f.open auslesen on Sun, 10 Jun 2012 13:43:33 GMT]]></title><description><![CDATA[<p>Vier Dinge:</p>
<p>1. Du schreibst hier kein C. Es ist weder notwendig noch sinnvoll, alle Variablen in einem großen Block am Funktionsanfang zu erstellen.</p>
<p>2. Wenn du ein fstream-Objekt wiederverwenden willst, musst du ggf. Fehlerzustände aufräumen - in diesem Fall eof. Das geht mit</p>
<pre><code class="language-cpp">f.clear();
</code></pre>
<p>Hübscher wäre es aber, jedes mal ein neues ifstream-Objekt zu verwenden; damit hat man solche Sorgen erst gar nicht.</p>
<ol start="3">
<li></li>
</ol>
<pre><code class="language-cpp">while(f.eof()) { 
  std::getline(f, foo);
  ...
}
</code></pre>
<p>ist ein beliebter Anfängerfehler. Das EOF-Bit wird gesetzt, nachdem ein Leseversuch fehlgeschlagen ist, weil das Dateiende erreicht wurde. Auf diese Weise wird also die letzte Zeile zwei mal verarbeitet, weil zwischen dem Einlesen und dem Verarbeiten der eingelesenen Daten keine Prüfung auf EOF stattfindet. Richtig ist</p>
<pre><code class="language-cpp">while(std::getline(f, foo)) {
  ...
}
</code></pre>
<p>std:.getline gibt den übergebenen Eingabestrom zurück, und dessen operator void*() wird dann verwendet, um die Bedingung auszuwerten. Er ist NULL (false), wenn ein Fehlercode gesetzt ist.</p>
<p>4. <strong>GANZ WICHTIG!</strong></p>
<pre><code class="language-cpp">char nPfad[20];

cin &gt;&gt; nPfad;
</code></pre>
<p>ist brandgefährlich. Wenn dir jemand da mehr als 19 Zeichen eingibt, hast du böse verschissen, und du solltest dir solchen Unfug gar nicht erst angewöhnen. Nimm std::string, und wenn du dann mit einer C-Funktion sprechen musst, nimm dessen Methode c_str(), um einen C-String zu bekommen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2221706</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2221706</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Sun, 10 Jun 2012 13:43:33 GMT</pubDate></item><item><title><![CDATA[Reply to Dateien in einer while schleife via readdir + f.open auslesen on Sun, 10 Jun 2012 14:20:35 GMT]]></title><description><![CDATA[<p>hab mein fehler selber gefunden musste einfach ein f.close nach beendigung der schleife hinzufügen, da ansonsten die erste Datei noch bestand hat.<br />
Und danke für den tipp mit cin hab das schon umgeändert war nur zum testen <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="😉"
    /><br />
Trotzdem vielen Dank für die Antworten <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/2221719</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2221719</guid><dc:creator><![CDATA[Sebastian S.]]></dc:creator><pubDate>Sun, 10 Jun 2012 14:20:35 GMT</pubDate></item></channel></rss>