<?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[Verzeichnis durchlaugen]]></title><description><![CDATA[<p>Guten Abend!</p>
<p>Entgegen der meisten C++-Programmierer die ich kennengelernt habe denke ich nicht, dass C eine veraltete Sprache ist, mit der man &quot;nichts machen kann&quot;. Ganz im Gegenteil konnte ich mich nie mit C++ anfreunden - wollte dies aber heute endlich einmal wagen.</p>
<p>Allerdings bin ich heute auf mein erstes Problem gestoßen, nämlich das rekursive Durchlaufen einer Verzeichnisstruktur. In reinem C ist würde ich das - mal grob runtergetippt - so machen:</p>
<pre><code>#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;sys/stat.h&gt;
#include &lt;sys/types.h&gt;
#include &lt;dirent.h&gt;
#include &lt;string.h&gt;

void show_files (const char *dirname) {
	DIR *dir;
	struct dirent *dir_info;
	char filename[5120];
	struct stat attr;

	if ((dir = opendir (dirname)) != NULL) {
		while ((dir_info = readdir (dir)) != NULL) {
			if (strcmp (dir_info-&gt;d_name, &quot;.&quot;) != 0 &amp;&amp; strcmp (dir_info-&gt;d_name, &quot;..&quot;) != 0) {
				if (dirname[strlen (dirname) - 1] == '/') {
					sprintf (filename, &quot;%s%s&quot;, dirname, dir_info-&gt;d_name);
				}
				else {
					sprintf (filename, &quot;%s/%s&quot;, dirname, dir_info-&gt;d_name);
				}

				if (stat (filename, &amp;attr) == 0) {
					fprintf (stdout, &quot;%s\n&quot;, filename);
					switch (attr.st_mode &amp; S_IFMT) {
						case S_IFDIR:
							show_files (filename);
							break;
						default:
							fprintf (stdout, &quot;%s\n&quot;, filename);
					}
				}
				else {
					fprintf (stderr, &quot;Could not stat file: %s\n&quot;, dir_info-&gt;d_name);
				}
			}
		}		
		closedir (dir);
	}
	else {
		fprintf (stderr, &quot;Could not open dir: %s\n&quot;, dirname);
	}
}

int main (int argc, char *argv[]) {
	show_files (&quot;/home&quot;);

	return EXIT_SUCCESS;
}
</code></pre>
<p>Da es mir aber rein subjektiv ziemlich dreckig vorkommen würde, C und C++ zu mischen, suche ich nun eine Lösung in reinem C++. Müsste doch eigentlich gehen, oder?</p>
<p>Mfg, Lord Kefir</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/159570/verzeichnis-durchlaugen</link><generator>RSS for Node</generator><lastBuildDate>Thu, 10 Sep 2026 15:25:07 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/159570.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 16 Sep 2006 17:11:17 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Verzeichnis durchlaugen on Sat, 16 Sep 2006 17:11:17 GMT]]></title><description><![CDATA[<p>Guten Abend!</p>
<p>Entgegen der meisten C++-Programmierer die ich kennengelernt habe denke ich nicht, dass C eine veraltete Sprache ist, mit der man &quot;nichts machen kann&quot;. Ganz im Gegenteil konnte ich mich nie mit C++ anfreunden - wollte dies aber heute endlich einmal wagen.</p>
<p>Allerdings bin ich heute auf mein erstes Problem gestoßen, nämlich das rekursive Durchlaufen einer Verzeichnisstruktur. In reinem C ist würde ich das - mal grob runtergetippt - so machen:</p>
<pre><code>#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;sys/stat.h&gt;
#include &lt;sys/types.h&gt;
#include &lt;dirent.h&gt;
#include &lt;string.h&gt;

void show_files (const char *dirname) {
	DIR *dir;
	struct dirent *dir_info;
	char filename[5120];
	struct stat attr;

	if ((dir = opendir (dirname)) != NULL) {
		while ((dir_info = readdir (dir)) != NULL) {
			if (strcmp (dir_info-&gt;d_name, &quot;.&quot;) != 0 &amp;&amp; strcmp (dir_info-&gt;d_name, &quot;..&quot;) != 0) {
				if (dirname[strlen (dirname) - 1] == '/') {
					sprintf (filename, &quot;%s%s&quot;, dirname, dir_info-&gt;d_name);
				}
				else {
					sprintf (filename, &quot;%s/%s&quot;, dirname, dir_info-&gt;d_name);
				}

				if (stat (filename, &amp;attr) == 0) {
					fprintf (stdout, &quot;%s\n&quot;, filename);
					switch (attr.st_mode &amp; S_IFMT) {
						case S_IFDIR:
							show_files (filename);
							break;
						default:
							fprintf (stdout, &quot;%s\n&quot;, filename);
					}
				}
				else {
					fprintf (stderr, &quot;Could not stat file: %s\n&quot;, dir_info-&gt;d_name);
				}
			}
		}		
		closedir (dir);
	}
	else {
		fprintf (stderr, &quot;Could not open dir: %s\n&quot;, dirname);
	}
}

int main (int argc, char *argv[]) {
	show_files (&quot;/home&quot;);

	return EXIT_SUCCESS;
}
</code></pre>
<p>Da es mir aber rein subjektiv ziemlich dreckig vorkommen würde, C und C++ zu mischen, suche ich nun eine Lösung in reinem C++. Müsste doch eigentlich gehen, oder?</p>
<p>Mfg, Lord Kefir</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1138648</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1138648</guid><dc:creator><![CDATA[Lord Kefir]]></dc:creator><pubDate>Sat, 16 Sep 2006 17:11:17 GMT</pubDate></item><item><title><![CDATA[Reply to Verzeichnis durchlaugen on Sat, 16 Sep 2006 17:34:59 GMT]]></title><description><![CDATA[<p>Hast du denn mal die API angeguckt? Mir schebt da Findfirstfile und Findnextfile vor Augen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1138659</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1138659</guid><dc:creator><![CDATA[the_hero99]]></dc:creator><pubDate>Sat, 16 Sep 2006 17:34:59 GMT</pubDate></item><item><title><![CDATA[Reply to Verzeichnis durchlaugen on Sat, 16 Sep 2006 17:44:15 GMT]]></title><description><![CDATA[<p>Naja wenn du es wirklich in &quot;reinem C++&quot; machen willst musst du dazu erstmal entweder die Funktionen wrappen oder eine Lib wie Boost nehmen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1138666</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1138666</guid><dc:creator><![CDATA[Thomas ** 0]]></dc:creator><pubDate>Sat, 16 Sep 2006 17:44:15 GMT</pubDate></item><item><title><![CDATA[Reply to Verzeichnis durchlaugen on Sat, 16 Sep 2006 20:08:27 GMT]]></title><description><![CDATA[<p>Gut wollte ich nur wissen - also implementiere ich den Kram in C. Schade, finde ich irgendwie dreckig.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/6080">@the_hero99</a>: Was für eine API? Ich habe die Frage extra ins allgemeine Forum gestellt, da es relativ plattforumunabhängig sein soll (geht in C ja schließlich auch mit einigen wenigen Einschränkungen).</p>
<p>Mfg, Lord Kefir</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1138745</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1138745</guid><dc:creator><![CDATA[Lord Kefir]]></dc:creator><pubDate>Sat, 16 Sep 2006 20:08:27 GMT</pubDate></item><item><title><![CDATA[Reply to Verzeichnis durchlaugen on Sat, 16 Sep 2006 20:16:14 GMT]]></title><description><![CDATA[<p>die boost lib und das ist dann immernoch sehr plattformunabhängig da boost ja auch nicht nur für eine platform kompiliert werden kann</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1138751</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1138751</guid><dc:creator><![CDATA[-.-:))]]></dc:creator><pubDate>Sat, 16 Sep 2006 20:16:14 GMT</pubDate></item><item><title><![CDATA[Reply to Verzeichnis durchlaugen on Sun, 17 Sep 2006 06:42:05 GMT]]></title><description><![CDATA[<p>Nochmal schönen Dank für Tipps. Ich mache das jetzt erst mal mit der Win-API.</p>
<p>Mfg, Lord Kefir</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1138849</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1138849</guid><dc:creator><![CDATA[Lord Kefir]]></dc:creator><pubDate>Sun, 17 Sep 2006 06:42:05 GMT</pubDate></item><item><title><![CDATA[Reply to Verzeichnis durchlaugen on Sun, 17 Sep 2006 07:58:22 GMT]]></title><description><![CDATA[<p>Jo super, und den Code oben hast du ja sicher auch wie von dir beschrieben &quot;kurz runtergetippt&quot; - und nun greifst du zur WinAPI. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_down"
      title=":-1:"
      alt="👎"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_down"
      title=":-1:"
      alt="👎"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1138858</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1138858</guid><dc:creator><![CDATA[Thomas ** 0]]></dc:creator><pubDate>Sun, 17 Sep 2006 07:58:22 GMT</pubDate></item><item><title><![CDATA[Reply to Verzeichnis durchlaugen on Sun, 17 Sep 2006 13:33:57 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/9591">@Thomas</a> (:<br />
Frag' mich nicht warum, aber ich gehe trotzdem mal kurz auf diesen pubertären Beitrag ein:<br />
Das Programm an dem ich arbeite ist für Windows. Und da MS eh auf jegliche Standards pfeift ist es völlig legim - aber nicht sehr schön -, auf die Windows-API zurückzugreifen. Wofür eine Library wie Boost installieren oder sonst irgendeinen Aufwand betreiben, wenn ich den Kram mal eben so mit FindFirstFile etc. implementieren kann?!<br />
Ich wollte nur wissen ob es mit einer ach so tollen und ausgereiften Sprache wie C++ möglich ist, ein Verzeichnis zu durchlaufen.</p>
<p>Mfg, Lord Kefir</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1139014</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1139014</guid><dc:creator><![CDATA[Lord Kefir]]></dc:creator><pubDate>Sun, 17 Sep 2006 13:33:57 GMT</pubDate></item><item><title><![CDATA[Reply to Verzeichnis durchlaugen on Sun, 17 Sep 2006 13:45:08 GMT]]></title><description><![CDATA[<p>Lord Kefir schrieb:</p>
<blockquote>
<p>Ich wollte nur wissen ob es mit einer ach so tollen und ausgereiften Sprache wie C++ möglich ist, ein Verzeichnis zu durchlaufen.</p>
</blockquote>
<p>Mit &quot;reinem C++&quot; genausowenig wie mit &quot;reinem C&quot;.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1139018</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1139018</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sun, 17 Sep 2006 13:45:08 GMT</pubDate></item><item><title><![CDATA[Reply to Verzeichnis durchlaugen on Sun, 17 Sep 2006 13:55:59 GMT]]></title><description><![CDATA[<p>Sagen wir es mal so: der von mir gepostete Code läuft auf ziemlich vielen Betriebssystemen. Wenn man noch ein paar Präprozessordirektiven reinpackt und einen mehr oder minder POSIX-konformen Compiler nutzt sogar unter Windows.</p>
<p>Mfg, Lord Kefir</p>
<p>[edit]<br />
Krass, unter Dev-C++ kannst Du den Code sogar so wie er ist einfügen und ausführen.<br />
[/edit]</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1139020</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1139020</guid><dc:creator><![CDATA[Lord Kefir]]></dc:creator><pubDate>Sun, 17 Sep 2006 13:55:59 GMT</pubDate></item><item><title><![CDATA[Reply to Verzeichnis durchlaugen on Sun, 17 Sep 2006 13:57:36 GMT]]></title><description><![CDATA[<p>Sagen wir mal so: Benutz boost::filesystem, welches auch auf &quot;ziemlich vielen&quot; Betriebssystemen läuft, auch unter Windows.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1139022</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1139022</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sun, 17 Sep 2006 13:57:36 GMT</pubDate></item><item><title><![CDATA[Reply to Verzeichnis durchlaugen on Sun, 17 Sep 2006 14:56:10 GMT]]></title><description><![CDATA[<p>Warum haben jetzt eigentlich einige ein Problem damit, wenn ich für ein Windowsprogramm die Windows-API benutze?</p>
<p>Mfg, Lord Kefir</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1139044</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1139044</guid><dc:creator><![CDATA[Lord Kefir]]></dc:creator><pubDate>Sun, 17 Sep 2006 14:56:10 GMT</pubDate></item></channel></rss>