<?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[Problem bei Verzeichnis auslesen]]></title><description><![CDATA[<p>Hallo!<br />
Ich wollte mit folgendem Code ein Verzeichnis auslesen:</p>
<pre><code class="language-cpp">#include &lt;dirent.h&gt;
#include &lt;iostream&gt;
using namespace std;

int main()
{
    DIR *hdir;
    struct dirent *entry;

    hdir = opendir(&quot;.&quot;);
    do
    {
        entry = readdir(hdir);
        if (entry)
        {
            cout &lt;&lt; entry-&gt;d_name &lt;&lt; endl;
        }
    } while (entry);
    closedir(hdir);
}
</code></pre>
<p>Mein Problem ist, dass &quot;.&quot; und &quot;..&quot; dabei auch ausgegeben werden.<br />
Ich habe versucht, das ganze mit</p>
<pre><code class="language-cpp">if(entry-&gt;d_name==&quot;.&quot; || entry-&gt;d_name==&quot;..&quot;)
</code></pre>
<p>abzufangen, aber das funktioniert nicht.<br />
Kann mir jemand helfen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/154533/problem-bei-verzeichnis-auslesen</link><generator>RSS for Node</generator><lastBuildDate>Mon, 07 Sep 2026 23:44:05 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/154533.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 27 Jul 2006 22:25:09 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem bei Verzeichnis auslesen on Thu, 27 Jul 2006 22:25:09 GMT]]></title><description><![CDATA[<p>Hallo!<br />
Ich wollte mit folgendem Code ein Verzeichnis auslesen:</p>
<pre><code class="language-cpp">#include &lt;dirent.h&gt;
#include &lt;iostream&gt;
using namespace std;

int main()
{
    DIR *hdir;
    struct dirent *entry;

    hdir = opendir(&quot;.&quot;);
    do
    {
        entry = readdir(hdir);
        if (entry)
        {
            cout &lt;&lt; entry-&gt;d_name &lt;&lt; endl;
        }
    } while (entry);
    closedir(hdir);
}
</code></pre>
<p>Mein Problem ist, dass &quot;.&quot; und &quot;..&quot; dabei auch ausgegeben werden.<br />
Ich habe versucht, das ganze mit</p>
<pre><code class="language-cpp">if(entry-&gt;d_name==&quot;.&quot; || entry-&gt;d_name==&quot;..&quot;)
</code></pre>
<p>abzufangen, aber das funktioniert nicht.<br />
Kann mir jemand helfen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1105744</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1105744</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Thu, 27 Jul 2006 22:25:09 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei Verzeichnis auslesen on Thu, 27 Jul 2006 22:44:53 GMT]]></title><description><![CDATA[<p>nur mal grob:</p>
<pre><code class="language-cpp">if(entry-&gt;d_name!=&quot;.&quot; &amp;&amp; entry-&gt;d_name!=&quot;..&quot;)
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1105747</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1105747</guid><dc:creator><![CDATA[Kuldren]]></dc:creator><pubDate>Thu, 27 Jul 2006 22:44:53 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei Verzeichnis auslesen on Thu, 27 Jul 2006 22:33:42 GMT]]></title><description><![CDATA[<p>Hallo,<br />
d_name ist in dirent als char-Array deklariert. =&gt; Wenn du zwei Arrays mit Hilfe des bereits vorhandenen op== vergleichst, vergleichst du nicht deren Inhalt miteinander, sondern die beiden Adressen, welche natürlicherweise voneinander abweichen.</p>
<p>Lösung: Um den Inhalt zweier char-Arrays vergleichen zu können, kannst du z.B. die bereits vorhandenen Funktionen aus string.h bzw. cstring benutzen: strncmp() bzw. strcmp().</p>
<p>Gruß, Caipi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1105748</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1105748</guid><dc:creator><![CDATA[Caipi]]></dc:creator><pubDate>Thu, 27 Jul 2006 22:33:42 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei Verzeichnis auslesen on Fri, 28 Jul 2006 10:37:27 GMT]]></title><description><![CDATA[<p>Ich kann aber auch entry-&gt;d_name einem String zuweisen. Dann muss ich es doch<br />
auch durch == mit einem String vergleichen können.<br />
cout&lt;&lt;entry-&gt;d_name ergibt als Ausgabe doch auch &quot;..&quot;, dann muss das doch,<br />
wenn es mit &quot;..&quot; verglichen wird, true ergeben.<br />
Aber ich guck mit die Compare-Methoden mal an.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1106037</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1106037</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Fri, 28 Jul 2006 10:37:27 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei Verzeichnis auslesen on Fri, 28 Jul 2006 11:11:57 GMT]]></title><description><![CDATA[<p>Deine Argumentation ist ein wenig wirr. Um das mal zu klären.<br />
Was verstehst du unter einem String?<br />
- eine Variable vom Typ std::string<br />
- eine Variable vom Typ char*<br />
- ein Stringliteral &quot;ddd&quot;<br />
Ersterem kannst du das zuweisen. Damit ist auch ein Vergleich möglich. Das liegt aber daran, dass operator= (für die Zuweisung) und operator== (Für den Test auf Gleichheit) von std::string so überladen sind, dass sie ein Argument vom Typ const char* akzeptiern.<br />
Das trifft auf Variante 2 und 3 nicht zu. Das sind eben keine Klassen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1106056</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1106056</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Fri, 28 Jul 2006 11:11:57 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei Verzeichnis auslesen on Fri, 28 Jul 2006 15:52:31 GMT]]></title><description><![CDATA[<p>Dann kann ich die Ausgabe von entry-&gt;d_name einem std::string zuweisen,<br />
und dann mit &quot;..&quot; und &quot;.&quot; vergleichen.<br />
Ich probier's einfach mal.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1106250</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1106250</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Fri, 28 Jul 2006 15:52:31 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei Verzeichnis auslesen on Fri, 28 Jul 2006 16:02:15 GMT]]></title><description><![CDATA[<p>Das ganze liess sich auch mit einem static_cast&lt;string&gt;(entry-&gt;d_name)<br />
machen. Warum ich da nicht gleich draufgekommen bin...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1106259</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1106259</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Fri, 28 Jul 2006 16:02:15 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei Verzeichnis auslesen on Fri, 28 Jul 2006 16:32:46 GMT]]></title><description><![CDATA[<p>Mach sowas auf keinen Fall. Das erzeugt undefiniertes Verhalten. Erzeuge dir einen temporären String wenn es sein muß.</p>
<pre><code class="language-cpp">if( string(entry-&gt;d_name) == &quot;..&quot;)
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1106285</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1106285</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Fri, 28 Jul 2006 16:32:46 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei Verzeichnis auslesen on Fri, 28 Jul 2006 17:15:38 GMT]]></title><description><![CDATA[<p>Oder nimm, wie dir Caipi schon gesagt hat strcmp( ). Ist IMHO schneller als eine temporäre Erstellung eines <em>std::string</em> und einem Aufruf von <em>std::string::operator==( )</em>.</p>
<p>Ich nehme 'mal an, dass du für Windows programmierst. Dir sollte klar sein, dass &lt;dirent.h&gt; Borland-Spezifisch ist (korrigiert mich, wenn ich falsch liege). Um mit allen Compilern für Windows mit installierter Platform-SDK compilierbar zu bleiben, verwendest du besser <em>FindFirstFile( )</em> und <em>FindNextFile( )</em> aus der <em>&lt;windows.h&gt;</em>:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;cstring&gt;

#include &lt;windows.h&gt;

using namespace std;

int main( )
{
    WIN32_FIND_DATA w32fd;
    void *find_handle = FindFirstFile( &quot;.\\*.*&quot;, &amp;w32fd ); 

    if( find_handle == INVALID_HANDLE_VALUE ) {

        cout &lt;&lt; &quot;Directory listing failed!&quot; &lt;&lt; endl;
        return EXIT_FAILURE;
    }

    do {

        if( strcmp( w32fd.cFileName, &quot;.&quot; ) &amp;&amp; strcmp( w32fd.cFileName, &quot;..&quot; ) ) {

            cout &lt;&lt; w32fd.cFileName &lt;&lt; endl;
        }

    } while( FindNextFile( find_handle, &amp;w32fd ) );
}
</code></pre>
<p>Greetz, Swordfish</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1106306</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1106306</guid><dc:creator><![CDATA[Swordfish]]></dc:creator><pubDate>Fri, 28 Jul 2006 17:15:38 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei Verzeichnis auslesen on Fri, 28 Jul 2006 18:45:50 GMT]]></title><description><![CDATA[<p>Nein, ich programmiere unter Linux. dirent ist da bekannt.<br />
Ich hab die static_casts jetzt weggemacht und string(entry-&gt;d_name)<br />
geschrieben.<br />
Ich hab mal gelesen, dass man für die explizite Typenumwandlung, die<br />
casts verwenden soll, die wären besser.<br />
Meine Absicht mit dem Verzeichnis lesen ist folgende.<br />
Ich gebe einen zentralen Pfad an. In diesem Pfad befinden sich weitere<br />
Ordner, die ich nacheinander öffnen will, und nach 3 Dateien durchsuchen will.<br />
Eine mit &quot;.bmb&quot;, eine mit &quot;.mpg&quot; und eine mit &quot;.png&quot; als Endung.<br />
Die bmb-Datei will ich öffnen, die ist im Textformat. Anhand dieser Datei<br />
erstell ich ein Objekt, dem ich die Daten aus der Datei übergebe. And das<br />
Objekt soll auch der vollständige Dateiname der mpg- und png-Datei übergeben<br />
werden, die jedoch ohne vollständige Pfadangabe, nur den Dateinamen.<br />
Und dieses Objekt wird dann in einer STL-Liste gespeichert.<br />
Ich habe dazu o. g. Listing ineinander verschachtelt. Zuerst wird der erste<br />
Ordner des Basisverzeichnisses gelesen, dieser Name wird dann übergeben.<br />
Dann wird das innere Verzeichnis gelesen, und festgestellt, ob sich da drin<br />
die gewünschten Files befinden.</p>
<pre><code class="language-cpp">bool BombDir::readBombDir()
{
    AllBombsList-&gt;clear();

    DIR *outerHdir,*innerHdir;
    struct dirent *outerEntry,*innerEntry;
    string Bombentry;
    unsigned int ListPos=0;

    //Read base directory
    outerHdir=opendir(BombPath.c_str());
    do
    {
        outerEntry=readdir(outerHdir);
        if(outerEntry &amp;&amp; string(outerEntry-&gt;d_name)!=&quot;.&quot; &amp;&amp; string(outerEntry-&gt;d_name)!=&quot;..&quot;)
        {
            Bombentry=BombPath+&quot;/&quot;+outerEntry-&gt;d_name;

            //Read bombentry
            innerHdir=opendir(Bombentry.c_str());
            do
            {
                innerEntry=readdir(innerHdir);

                //Overread dots and search for bmb-file
                if(innerEntry &amp;&amp; string(innerEntry-&gt;d_name)!=&quot;.&quot; &amp;&amp; string(innerEntry-&gt;d_name)!=&quot;..&quot; &amp;&amp; strstr(string(innerEntry-&gt;d_name).c_str(),&quot;.bmb&quot;))
                {
                    ListPos++;

                    //Open bmb-file
                    fstream BombFile;

                    //Build path
                    string BombFilePath=BombPath+&quot;/&quot;+outerEntry-&gt;d_name+&quot;/&quot;+innerEntry-&gt;d_name;

                    string temp1;
                    unsigned int temp2;

                    BombFile.open(BombFilePath.c_str(),ios_base::in);
                    if(BombFile)
                    {
                        //Create a temporary Bomb object
                        Bomb* tempBomb=new Bomb;

                        //Read data from file and set temporary bomb
                        getline(BombFile,temp1);
                        tempBomb-&gt;setBombId(temp1);
                        getline(BombFile,temp1);
                        tempBomb-&gt;setBombName(temp1);
                        getline(BombFile,temp1);
                        tempBomb-&gt;setBombColour(temp1);
                        BombFile&gt;&gt;temp2;
                        tempBomb-&gt;setBombSize(temp2);
                        BombFile&gt;&gt;temp2;
                        tempBomb-&gt;setBombRaiseTime(temp2);
                        BombFile&gt;&gt;temp2;
                        tempBomb-&gt;setBombClimbHeight(temp2);
                        BombFile&gt;&gt;temp2;
                        tempBomb-&gt;setBombExplodeTime(temp2);

                        //Overread newline
                        getline(BombFile,temp1);

                        getline(BombFile,temp1);
                        tempBomb-&gt;setBombPicture(temp1);
                        getline(BombFile,temp1);
                        tempBomb-&gt;setBombMovie(temp1);

                        //Call function to add bomb entry
                        AddBombEntry(tempBomb,ListPos);

                        delete tempBomb;

                        BombFile.close();
                    }
                }

                //Search for mpg
                if(innerEntry &amp;&amp; string(innerEntry-&gt;d_name)!=&quot;.&quot; &amp;&amp; string(innerEntry-&gt;d_name)!=&quot;..&quot; &amp;&amp; strstr(string(innerEntry-&gt;d_name).c_str(),&quot;.mpg&quot;))
                {
                    std::cout&lt;&lt;innerEntry-&gt;d_name&lt;&lt;&quot;\n&quot;;//Wird noch verarbeitet
                }

                //Search for png
                if(innerEntry &amp;&amp; string(innerEntry-&gt;d_name)!=&quot;.&quot; &amp;&amp; string(innerEntry-&gt;d_name)!=&quot;..&quot; &amp;&amp; strstr(string(innerEntry-&gt;d_name).c_str(),&quot;.png&quot;))
                {
                    std::cout&lt;&lt;innerEntry-&gt;d_name&lt;&lt;&quot;\n&quot;;//Wird noch verarbeitet
                }

            }
            while(innerEntry);

            closedir(innerHdir);
        }
    }
    while(outerEntry);

    closedir(outerHdir);
}

void BombDir::MoveIter(unsigned int _Pos)
{
    Iter=AllBombsList-&gt;begin();
    for(unsigned int PosCount=1;PosCount!=_Pos;PosCount++)
    {
        Iter++;
    }
    return;
}
</code></pre>
<p>Die unterste Methode soll den Iterator der Liste bewegen. Die hab ich<br />
gekapselt, da ich sie in dieser Klasse noch öfter brauchen werde.<br />
Die add-Methode usw. muss ich noch schreiben.</p>
<p>Hier noch meine Deklaration, aber es ist noch nicht ganz fertig:</p>
<pre><code class="language-cpp">#include&lt;dirent.h&gt;
#include&lt;list&gt;
#include&quot;bomb.h&quot;

typedef std::list&lt;Bomb&gt;BombDirList;

class BombDir
{
public:
    BombDir(std::string _BombPath):BombPath(_BombPath)
    {
        AllBombsList=new BombDirList;
    }

    ~BombDir()
    {
        delete AllBombsList;
    }

    bool readBombDir();

    //    bool delBombDir(std::string _DirName);

    //    list* getBombDir()

private:
    BombDir()
    {}

    std::string BombPath;

    BombDirList* AllBombsList;

    BombDirList::iterator Iter;

    void MoveIter(unsigned int);
};
</code></pre>
<p>Ist vielleicht alles etwas unschön oder umständlich realisiert, aber wie<br />
gesagt, ich bin noch Anfänger.<br />
Ich krieg erst so nach und nach ein Bild davon, was mir in der Standard-<br />
bibliothek so alles zur Verfügung steht.<br />
Ich hab jetzt direkt schon ein grösseres Projekt angefangen, und in dieser<br />
Zeit schon alles einigemale umgekrempelt, weil ich feststellen musste, dass<br />
ich das Rad neu erfunden habe. An lebenden Objekten lernt man doch am besten,<br />
oder etwa nicht?<br />
<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>
]]></description><link>https://www.c-plusplus.net/forum/post/1106349</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1106349</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Fri, 28 Jul 2006 18:45:50 GMT</pubDate></item></channel></rss>