<?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[rekursive funktion bricht ab?]]></title><description><![CDATA[<p>Hi leute,<br />
ich wollte mirn kleines programm schreiben, das mir jeden dateinamen aller meines mainordners unterordner in eine datei schreibt.<br />
Da ich nicht weiß wieviele verzeichnisse, bzw. unterverzeichnisse es gibt, dachte ich mir, dass eine rekursive funktion hier wohl angemessen wäre.<br />
Aber nachdem die funktion sich einmal selbst aufgerufen hat, wird sie wieder beendet. Ist das immer so? Dann würds aber doch rekursive funktionen überhaupt nicht bringen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/46458/rekursive-funktion-bricht-ab</link><generator>RSS for Node</generator><lastBuildDate>Fri, 24 Apr 2026 15:02:07 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/46458.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 19 Aug 2003 21:27:15 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to rekursive funktion bricht ab? on Tue, 19 Aug 2003 21:27:15 GMT]]></title><description><![CDATA[<p>Hi leute,<br />
ich wollte mirn kleines programm schreiben, das mir jeden dateinamen aller meines mainordners unterordner in eine datei schreibt.<br />
Da ich nicht weiß wieviele verzeichnisse, bzw. unterverzeichnisse es gibt, dachte ich mir, dass eine rekursive funktion hier wohl angemessen wäre.<br />
Aber nachdem die funktion sich einmal selbst aufgerufen hat, wird sie wieder beendet. Ist das immer so? Dann würds aber doch rekursive funktionen überhaupt nicht bringen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/336388</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/336388</guid><dc:creator><![CDATA[crash0r]]></dc:creator><pubDate>Tue, 19 Aug 2003 21:27:15 GMT</pubDate></item><item><title><![CDATA[Reply to rekursive funktion bricht ab? on Tue, 19 Aug 2003 21:29:56 GMT]]></title><description><![CDATA[<p>Wenn du in der Funktion die Funktion aufrufst nicht - bis dies einmal nicht mehr geschieht und es wieder rückwärts geht (und alle Funktionen wieder zurückkehren)</p>
<p>Zeig mal ein bisschen Code <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/336393</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/336393</guid><dc:creator><![CDATA[flenders]]></dc:creator><pubDate>Tue, 19 Aug 2003 21:29:56 GMT</pubDate></item><item><title><![CDATA[Reply to rekursive funktion bricht ab? on Tue, 19 Aug 2003 22:04:58 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">void scan_directory(std::string path) {
    HANDLE          search;
    WIN32_FIND_DATA File;
    bool            did = false;

    for(search = FindFirstFile(path.c_str(), &amp;File); GetLastError() != ERROR_NO_MORE_FILES; FindNextFile(search, &amp;File)) {
        if(did == false) {
            path = path.substr(0, path.length() - 1);
            did = true;
        }
        MessageBox(NULL, File.cFileName, &quot;&quot;, MB_OK);
        if(File.dwFileAttributes != FILE_ATTRIBUTE_ARCHIVE) {
            if((strlen(File.cFileName) != 1) &amp;&amp; (strlen(File.cFileName) != 2)) {
                std::string newpath = path + File.cFileName + &quot;\\*&quot;;
                scan_directory(newpath);
            }
        }
        else {
            out &lt;&lt; File.cFileName &lt;&lt; '\n';
        }
    }
    FindClose(search);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/336405</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/336405</guid><dc:creator><![CDATA[crash0r]]></dc:creator><pubDate>Tue, 19 Aug 2003 22:04:58 GMT</pubDate></item><item><title><![CDATA[Reply to rekursive funktion bricht ab? on Wed, 20 Aug 2003 07:59:51 GMT]]></title><description><![CDATA[<p>Was soll der Check &quot;File.dwFileAttributes != FILE_ATTRIBUTE_ARCHIVE&quot; und um . und .. rauszufiltern würde ich nicht nur checken, ob der datei/ordnername min. 3 Zeichen lang ist (es gibt auch gültige 1 und 2 Zeichen lange <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 />
Außerdem bekommst du doch, wenn du das \* schon vor dem Funktionsaufruf anhängst und an den übergeben Pfad innerhalb der Funktion wieder den Verzeichnisnamen dranhängst einen Pfad der bald sehr viele \* enthält <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="😉"
    /></p>
<p>Lass dir aber doch zum Test erstmal einfach die Dateinamen ausgeben und ob es ein Verzeichnis ist, oder nicht (damit du mal siehst, ob die Sachen richtig eingeordnet werden <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
<p><a href="http://c-plusplus.net/forum/viewtopic.php?t=16725" rel="nofollow">http://c-plusplus.net/forum/viewtopic.php?t=16725</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/336514</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/336514</guid><dc:creator><![CDATA[flenders]]></dc:creator><pubDate>Wed, 20 Aug 2003 07:59:51 GMT</pubDate></item><item><title><![CDATA[Reply to rekursive funktion bricht ab? on Wed, 20 Aug 2003 08:27:45 GMT]]></title><description><![CDATA[<p>mit dem . &amp; .. filtern hast recht, hab des nur letztens mit if cFileName == &quot;..&quot; probiert, aber ging nicht, dann wars mir zu dumm.<br />
Aber an dem \* ist nichts falsch. Man muss das dir, das man durchsuchen will mit dem stern haben, und wenn dus nicht überlesen hast, filter ich das in der funktion auch wieder raus.</p>
<pre><code class="language-cpp">if(did == false) { 
            path = path.substr(0, path.length() - 1); 
            did = true; 
        }
</code></pre>
<p>und der zeigt mir dann auch die ersten dateien an, dann geht er in den download ordner (der erste ordner), zeigt mir in dem die dateien an, aber wenn er fertig ist, zeigt er nichtmal mehr den rest der dateien im main-verzeichnis an.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/336543</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/336543</guid><dc:creator><![CDATA[crash0r-]]></dc:creator><pubDate>Wed, 20 Aug 2003 08:27:45 GMT</pubDate></item><item><title><![CDATA[Reply to rekursive funktion bricht ab? on Wed, 20 Aug 2003 08:59:35 GMT]]></title><description><![CDATA[<p>und des beispiel bei der url die du mir gegeben hast hab ich jetzt mal ein bischen umgeschrieben, dass er mir auch alle dateien anzeigen soll.<br />
Da geht er auch nur den ersten ordner durch, wobei er aber noch die anderen dateien probiert, die im mainverzeichnis sind.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/336570</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/336570</guid><dc:creator><![CDATA[crash0r-]]></dc:creator><pubDate>Wed, 20 Aug 2003 08:59:35 GMT</pubDate></item><item><title><![CDATA[Reply to rekursive funktion bricht ab? on Wed, 20 Aug 2003 09:00:06 GMT]]></title><description><![CDATA[<p>Kleiner Tip:</p>
<p>Bei dem Scannen der Verzeichnisse würde ich nicht nur fragen ob es ein Verzeichnis ist, sondern auch ob es komprimiert ist etc....</p>
<p>Komprimierte Verzeichnisse gelten nicht mehr als FILE_ATTRIBUTE_DIRECTORY</p>
<p>Würde ich immer artig mit '|' abfragen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/336571</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/336571</guid><dc:creator><![CDATA[Frenzy]]></dc:creator><pubDate>Wed, 20 Aug 2003 09:00:06 GMT</pubDate></item><item><title><![CDATA[Reply to rekursive funktion bricht ab? on Wed, 20 Aug 2003 09:25:28 GMT]]></title><description><![CDATA[<p>DerAltenburger schrieb:</p>
<blockquote>
<p>Der rekursive Aufruf startet FindFirst wiederholt. Wenn das Programm aus der Rekursion zurueckkommt, ist die Frage, ob die Daten in WIN32_FIND_DATA wfd von vorheriger Ebene wieder gueltig sind.</p>
<p>Bei mir (BCB) war der record zerstoert!!! Dann Rekursierte der sonstwohin.</p>
<p>Ich hab alle Ordner- Namen in einer Liste gespeichert und NACH FindClose erst die Rekursionen abgearbeitet! Da gings dann ohne Probleme</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/336589</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/336589</guid><dc:creator><![CDATA[flenders]]></dc:creator><pubDate>Wed, 20 Aug 2003 09:25:28 GMT</pubDate></item><item><title><![CDATA[Reply to rekursive funktion bricht ab? on Wed, 20 Aug 2003 10:37:56 GMT]]></title><description><![CDATA[<p>crash0r schrieb:</p>
<blockquote>
<pre><code class="language-cpp">for(search = FindFirstFile(path.c_str(), &amp;File); GetLastError() != ERROR_NO_MORE_FILES; FindNextFile(search, &amp;File)) {
</code></pre>
</blockquote>
<p>sieht falsch aus. was schreibt denn die doku, woran man erkennt, ob FindNextFole geklappt hat. war das nicht der returnwert?<br />
dann nimm den auch, verdammich.<br />
mir scheint, du läßt dir nen laserror machen, der aber erst beim nachsten _fehler_ nen neuen wert annimmt und nicht bei der nächsten fehlerfreien funktion.</p>
<pre><code class="language-cpp">for(search=FFF(...),ok=TRUE;ok;ok=FNF(...)){
</code></pre>
<p>oder so.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/336661</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/336661</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Wed, 20 Aug 2003 10:37:56 GMT</pubDate></item><item><title><![CDATA[Reply to rekursive funktion bricht ab? on Wed, 20 Aug 2003 20:19:31 GMT]]></title><description><![CDATA[<p>is zwar in reinem c, funzt aber ganz gut:</p>
<pre><code>#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;windows.h&gt;

int scan_directory(char * path) {
    HANDLE			search;
    WIN32_FIND_DATA	File;
    BOOL			did = FALSE;
    char			buf[MAX_PATH];
    int count=0;
    sprintf(buf,&quot;%s\\*.*&quot;,path);
    search=FindFirstFile(buf, &amp;File);
	if (search != INVALID_HANDLE_VALUE)
	    do{	
	    	if( File.cFileName[0]!=46 ){ // . und .. nicht verwenden
		    	if( (File.dwFileAttributes&amp;FILE_ATTRIBUTE_DIRECTORY)!=0){ //wenn verzeichnis dann nochmal rekursiv aufrufen
	 				sprintf(buf,&quot;%s\\%s&quot;,path,File.cFileName);
		    		count=count+scan_directory(buf);
	    		}else{
	    			count++;
		    		printf(&quot;%s\\%s\n&quot;,path,File.cFileName);
				}
			}
    	}while(FindNextFile(search, &amp;File));
    FindClose(search);
    return count;
}

int main(int argc, char *argv[]){
	int i=scan_directory(&quot;C:&quot;);
	printf(&quot;%i Datei(en)\n&quot;,i);
	system(&quot;PAUSE&quot;);
	return 0;
}
</code></pre>
<p>gruss,</p>
<p>matthias</p>
]]></description><link>https://www.c-plusplus.net/forum/post/337216</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/337216</guid><dc:creator><![CDATA[maconey]]></dc:creator><pubDate>Wed, 20 Aug 2003 20:19:31 GMT</pubDate></item><item><title><![CDATA[Reply to rekursive funktion bricht ab? on Wed, 20 Aug 2003 20:27:24 GMT]]></title><description><![CDATA[<p>achja, warums bei dir ned geht:</p>
<p>erstmal ists ned schön so eine for schleife zu verwenden, normalerweise packt man sowas in ne while schleife. for schleifen sind nur für das gedacht, das sie von i bis n zählen und sonst nichts anderes. es geht zwar, aber das ist eigentlich nicht sinn und zweck, sowas trägt nur zur verwirrung bei.</p>
<p>und dann, warum dieser vergleich:</p>
<pre><code>if(File.dwFileAttributes != FILE_ATTRIBUTE_ARCHIVE)
</code></pre>
<p>hier wird überprüft ob die datei das archiv attribut gesetzt hat oder nicht, ein verzeichnis kann aber genauso ein archiv attribut gesetzt haben wie eine normale date -&gt; etwas willkürliche rekursive aufrufe, manchmal wohl auch bei dateien.</p>
<p>sonst eigentlich vom prinzip her richtig, ich habs allerdings nicht ausprobiert ob in dem for() was nicht stimmt, es müsste allerdings passen.</p>
<p>und noch was ist falsch in dem vergleich... dwFileAttributes enthält alle attribute einer datei, z.b.<br />
(1. bit ist system, 2tes versteckt, 3. archiv und 4. schreibgeschützt)<br />
0101<br />
und wenn du jetzt einen vergleich machst mit archiv:<br />
also<br />
0010<br />
-&gt;<br />
if(0101!=0010)<br />
ist das glaub ich ned das was du willst...</p>
<p>wenn du aber die beiden werte bitweise undverknüpfst und dann auf !=0 überprüfst passts, also so:</p>
<p>if( (File.dwFileAttributes&amp;FILE_ATTRIBUTE_DIRECTORY)!=0)</p>
<p>(man beachte die innere klammer :D)</p>
<p>gruss,</p>
<p>matthias</p>
]]></description><link>https://www.c-plusplus.net/forum/post/337221</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/337221</guid><dc:creator><![CDATA[maconey]]></dc:creator><pubDate>Wed, 20 Aug 2003 20:27:24 GMT</pubDate></item><item><title><![CDATA[Reply to rekursive funktion bricht ab? on Thu, 21 Aug 2003 13:42:26 GMT]]></title><description><![CDATA[<p>danke an euch alle, hat mir sehr geholfen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/337748</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/337748</guid><dc:creator><![CDATA[crash0r]]></dc:creator><pubDate>Thu, 21 Aug 2003 13:42:26 GMT</pubDate></item><item><title><![CDATA[Reply to rekursive funktion bricht ab? on Fri, 12 Nov 2004 14:03:29 GMT]]></title><description><![CDATA[<p>Mir hat auch sehr geholfen <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/650344</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/650344</guid><dc:creator><![CDATA[leon_reif]]></dc:creator><pubDate>Fri, 12 Nov 2004 14:03:29 GMT</pubDate></item></channel></rss>