<?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[Verzeichnisse]]></title><description><![CDATA[<p>Hallo,</p>
<p>zum Thema Verzeichnisse auslesen hatte ich schon einmal einen Thread geschrieben, allerdings in C. Naja auf jeden Fall treten damit Probleme auf.<br />
Hier erst einmal der Code</p>
<pre><code class="language-cpp">struct DirContent
{
	std::string                parent;
	std::vector&lt; std::string &gt; dir;
	std::vector&lt; std::string &gt; file;
};

bool getDirectoryContent( DirContent &amp;dc, std::string root )
{
	//Variablen anlegen
	WIN32_FIND_DATA dir;
	HANDLE          fHandle;
	std::string     directory;
	struct stat     entrystat;

	//Die übergebene Struktur leeren
	dc.parent = root;
	dc.file.clear();
	dc.dir.clear();

	//Im Pfadnamen sagen, dass alle Dateien mit jeder Endung ausgelesen werden sollen.
	directory = root + &quot;\\*.*&quot;;

	//Das Verzeichnis öffnen
	fHandle = FindFirstFile( directory.c_str(), &amp;dir );

	//Konnte das Verzeichnis geöffnet werden?
	if( fHandle == INVALID_HANDLE_VALUE )
	{
		return false;
	}

	//Das Verzeichnis auslesen
	do
	{
		//Ist in dir eine Datei oder ein Unterordner?
		if ( stat( dir.cFileName, &amp;entrystat ) )
		{
			allegro_message( &quot;Fehler beim lesen von '%s': %s&quot;, dir.cFileName, strerror(errno) );
			continue;
		}
		if ( S_ISREG( entrystat.st_mode ) )
		{
			//Datei
			dc.file.push_back( dir.cFileName );
		}
		else if ( S_ISDIR( entrystat.st_mode ) )
		{
			//Verzeichnis
			dc.dir.push_back( dir.cFileName );
		}
	}
	while( FindNextFile( fHandle, &amp;dir ) );

	//Das Verzeichnis wieder schliessen
	FindClose( fHandle );

	return true;
}

/*
    AUFRUF:
    DirContent dc;
    getDirectoryContent( dc, &quot;C:&quot; ); //Funktioniert nicht!
    getDirectoryContent( dc, &quot;.&quot; ); //Funkioniert!
*/
</code></pre>
<p>Mit diesem Code will ich nun ein Verzeichnis auslesen und nach Dateien und Unterverzeichnisse trennen. Das Auslesen klappt bei allen Verzeichnissen, die ich Angebe. Nur wenn ich nun zwischen Datei und Verzeichnis unterscheiden will( stat() usw. ), dann kann ich das Verzeichnis auslesen, in dem die EXE ist, aber kein anderes Verzeichnis. Jedesmal sagt mit die Ausgabe( allegro_message() ):</p>
<blockquote>
<p>Fehler beim lesen von '[...]': No such file or directory</p>
</blockquote>
<p>Wieso kann er keine Verzeichnisse außer &quot;.&quot; auslesen?</p>
<p>Ich hoffe, ich hab mich verständlich ausgedrückt.<br />
P.S: Ich habe bewusst auf Frameworks/Bibliotheken wie z.B. Boost verzichtet. Solche Vorschläge möchte ich also nicht lesen <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 />
MfG. Christoph Ludwig</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/251201/verzeichnisse</link><generator>RSS for Node</generator><lastBuildDate>Tue, 15 Sep 2026 14:31:00 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/251201.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 30 Sep 2009 17:58:49 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Verzeichnisse on Wed, 30 Sep 2009 17:58:49 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>zum Thema Verzeichnisse auslesen hatte ich schon einmal einen Thread geschrieben, allerdings in C. Naja auf jeden Fall treten damit Probleme auf.<br />
Hier erst einmal der Code</p>
<pre><code class="language-cpp">struct DirContent
{
	std::string                parent;
	std::vector&lt; std::string &gt; dir;
	std::vector&lt; std::string &gt; file;
};

bool getDirectoryContent( DirContent &amp;dc, std::string root )
{
	//Variablen anlegen
	WIN32_FIND_DATA dir;
	HANDLE          fHandle;
	std::string     directory;
	struct stat     entrystat;

	//Die übergebene Struktur leeren
	dc.parent = root;
	dc.file.clear();
	dc.dir.clear();

	//Im Pfadnamen sagen, dass alle Dateien mit jeder Endung ausgelesen werden sollen.
	directory = root + &quot;\\*.*&quot;;

	//Das Verzeichnis öffnen
	fHandle = FindFirstFile( directory.c_str(), &amp;dir );

	//Konnte das Verzeichnis geöffnet werden?
	if( fHandle == INVALID_HANDLE_VALUE )
	{
		return false;
	}

	//Das Verzeichnis auslesen
	do
	{
		//Ist in dir eine Datei oder ein Unterordner?
		if ( stat( dir.cFileName, &amp;entrystat ) )
		{
			allegro_message( &quot;Fehler beim lesen von '%s': %s&quot;, dir.cFileName, strerror(errno) );
			continue;
		}
		if ( S_ISREG( entrystat.st_mode ) )
		{
			//Datei
			dc.file.push_back( dir.cFileName );
		}
		else if ( S_ISDIR( entrystat.st_mode ) )
		{
			//Verzeichnis
			dc.dir.push_back( dir.cFileName );
		}
	}
	while( FindNextFile( fHandle, &amp;dir ) );

	//Das Verzeichnis wieder schliessen
	FindClose( fHandle );

	return true;
}

/*
    AUFRUF:
    DirContent dc;
    getDirectoryContent( dc, &quot;C:&quot; ); //Funktioniert nicht!
    getDirectoryContent( dc, &quot;.&quot; ); //Funkioniert!
*/
</code></pre>
<p>Mit diesem Code will ich nun ein Verzeichnis auslesen und nach Dateien und Unterverzeichnisse trennen. Das Auslesen klappt bei allen Verzeichnissen, die ich Angebe. Nur wenn ich nun zwischen Datei und Verzeichnis unterscheiden will( stat() usw. ), dann kann ich das Verzeichnis auslesen, in dem die EXE ist, aber kein anderes Verzeichnis. Jedesmal sagt mit die Ausgabe( allegro_message() ):</p>
<blockquote>
<p>Fehler beim lesen von '[...]': No such file or directory</p>
</blockquote>
<p>Wieso kann er keine Verzeichnisse außer &quot;.&quot; auslesen?</p>
<p>Ich hoffe, ich hab mich verständlich ausgedrückt.<br />
P.S: Ich habe bewusst auf Frameworks/Bibliotheken wie z.B. Boost verzichtet. Solche Vorschläge möchte ich also nicht lesen <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 />
MfG. Christoph Ludwig</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1786606</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1786606</guid><dc:creator><![CDATA[ChristophLu]]></dc:creator><pubDate>Wed, 30 Sep 2009 17:58:49 GMT</pubDate></item><item><title><![CDATA[Reply to Verzeichnisse on Wed, 30 Sep 2009 18:09:08 GMT]]></title><description><![CDATA[<p>ChristophLu schrieb:</p>
<blockquote>
<p>Ich hoffe, ich hab mich verständlich ausgedrückt.<br />
P.S: Ich habe bewusst auf Frameworks/Bibliotheken wie z.B. Boost verzichtet. Solche Vorschläge möchte ich also nicht lesen <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 />
MfG. Christoph Ludwig</p>
</blockquote>
<p>Dann wäre es vielleicht nicht ganz abwegig, im entsprechenden Unterforum, in deinem Falle WinAPI, nachzufragen. Hier geht es nämlich um Standard-C++ (und Quasi-Standard-Boost).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1786613</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1786613</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Wed, 30 Sep 2009 18:09:08 GMT</pubDate></item><item><title><![CDATA[Reply to Verzeichnisse on Wed, 30 Sep 2009 20:50:33 GMT]]></title><description><![CDATA[<p>Du gibst hier:</p>
<pre><code class="language-cpp">if ( stat( dir.cFileName, &amp;entrystat ) )
</code></pre>
<p>den Pfad nicht an, sondern nur den reinen Dateinamen.</p>
<p>Ich frage mich allerdings, warum du nicht <code>dir</code> verwendest. <code>WIN32_FIND_DATA</code> liefert dir alle Attribute, die du brauchst:</p>
<pre><code class="language-cpp">if(dir.dwFileAttributes &amp; FILE_ATTRIBUTE_DIRECTORY) {
   // Verzeichnis
}
else {
   // Datei
}
</code></pre>
<p>Stefan.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1786670</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1786670</guid><dc:creator><![CDATA[DStefan]]></dc:creator><pubDate>Wed, 30 Sep 2009 20:50:33 GMT</pubDate></item></channel></rss>