<?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[FindFirst geht nicht]]></title><description><![CDATA[<p>Hi,</p>
<p>folgendes Programm ist aus der MSDN und funktioniert nicht. Wieso?</p>
<pre><code class="language-cpp">#define  _WIN32_WINNT  0x0400

#include &lt;windows.h&gt;
#include &lt;string.h&gt;
#include &lt;stdio.h&gt;

int main(void)
{
	WIN32_FIND_DATA finddata;
	HANDLE hand;
	char dirname=&quot;f:\\*.*&quot;;

	hand=FindFirstFile(LPCWSTR(dirname),&amp;finddata);
	if (hand==INVALID_HANDLE_VALUE)
	{
	printf(&quot;Hier geht nix!\n&quot;);
	return(0);
	}
	else
	{
	printf(&quot;%s\n&quot;,finddata.cFileName);

	FindClose(hand);
	return (1);
	}

}
</code></pre>
<p>Gruß<br />
Daniel</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/136520/findfirst-geht-nicht</link><generator>RSS for Node</generator><lastBuildDate>Sun, 12 Jul 2026 15:19:34 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/136520.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 10 Feb 2006 22:26:07 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to FindFirst geht nicht on Fri, 10 Feb 2006 22:27:52 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>folgendes Programm ist aus der MSDN und funktioniert nicht. Wieso?</p>
<pre><code class="language-cpp">#define  _WIN32_WINNT  0x0400

#include &lt;windows.h&gt;
#include &lt;string.h&gt;
#include &lt;stdio.h&gt;

int main(void)
{
	WIN32_FIND_DATA finddata;
	HANDLE hand;
	char dirname=&quot;f:\\*.*&quot;;

	hand=FindFirstFile(LPCWSTR(dirname),&amp;finddata);
	if (hand==INVALID_HANDLE_VALUE)
	{
	printf(&quot;Hier geht nix!\n&quot;);
	return(0);
	}
	else
	{
	printf(&quot;%s\n&quot;,finddata.cFileName);

	FindClose(hand);
	return (1);
	}

}
</code></pre>
<p>Gruß<br />
Daniel</p>
]]></description><link>https://www.c-plusplus.net/forum/post/991255</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/991255</guid><dc:creator><![CDATA[DanielN]]></dc:creator><pubDate>Fri, 10 Feb 2006 22:27:52 GMT</pubDate></item><item><title><![CDATA[Reply to FindFirst geht nicht on Fri, 10 Feb 2006 22:29:29 GMT]]></title><description><![CDATA[<p>Was geht daran nicht? Fehlermeldung?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/991257</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/991257</guid><dc:creator><![CDATA[guenni81]]></dc:creator><pubDate>Fri, 10 Feb 2006 22:29:29 GMT</pubDate></item><item><title><![CDATA[Reply to FindFirst geht nicht on Fri, 10 Feb 2006 22:31:14 GMT]]></title><description><![CDATA[<p>INVALID_HANDLE</p>
]]></description><link>https://www.c-plusplus.net/forum/post/991259</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/991259</guid><dc:creator><![CDATA[DanielN]]></dc:creator><pubDate>Fri, 10 Feb 2006 22:31:14 GMT</pubDate></item><item><title><![CDATA[Reply to FindFirst geht nicht on Fri, 10 Feb 2006 22:32:07 GMT]]></title><description><![CDATA[<p>achso und C++ 8.0 benutz ich <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/991260</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/991260</guid><dc:creator><![CDATA[DanielN]]></dc:creator><pubDate>Fri, 10 Feb 2006 22:32:07 GMT</pubDate></item><item><title><![CDATA[Reply to FindFirst geht nicht on Sat, 11 Feb 2006 00:26:48 GMT]]></title><description><![CDATA[<p>Ich nehme mal an, Du hast UNICODE definiert. Deine Stringdeklaration ist falsch, richtig wäre es so:</p>
<pre><code class="language-cpp">TCHAR dirname[] = _T(&quot;f:\\*.*&quot;);
</code></pre>
<p>Und der Aufruf von FindFirstFile lautet:</p>
<pre><code class="language-cpp">hand = FindFirstFile(dirname, &amp;finddata);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/991296</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/991296</guid><dc:creator><![CDATA[mgs]]></dc:creator><pubDate>Sat, 11 Feb 2006 00:26:48 GMT</pubDate></item><item><title><![CDATA[Reply to FindFirst geht nicht on Sat, 11 Feb 2006 00:36:43 GMT]]></title><description><![CDATA[<p>Bzw. ohne UNICODE:</p>
<pre><code class="language-cpp">char dirname[] = &quot;f:\\*.*&quot;;

hand = FindFirstFile(dirname, &amp;finddata);
</code></pre>
<p>Noch ein Tip: GetLastError(), aufgerufen direkt nach einer fehlgeschlagenen API-Funktion, gibt einen aussagekräftigeren Fehlerkode zurück.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/991304</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/991304</guid><dc:creator><![CDATA[mgs]]></dc:creator><pubDate>Sat, 11 Feb 2006 00:36:43 GMT</pubDate></item><item><title><![CDATA[Reply to FindFirst geht nicht on Sat, 11 Feb 2006 08:08:42 GMT]]></title><description><![CDATA[<p>Ohne Unicode (also ANSI) ist folgendes korrekt:</p>
<pre><code class="language-cpp">WIN32_FIND_DATAA finddata;
char dirname[] = &quot;f:\\*.*&quot;;
hand = FindFirstFileA(dirname, &amp;finddata);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/991336</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/991336</guid><dc:creator><![CDATA[Jochen Kalmbach]]></dc:creator><pubDate>Sat, 11 Feb 2006 08:08:42 GMT</pubDate></item><item><title><![CDATA[Reply to FindFirst geht nicht on Sat, 11 Feb 2006 10:16:09 GMT]]></title><description><![CDATA[<p>das teste ich dann gleich mal und sage vielen dank.</p>
<p>gruß<br />
Daniel</p>
]]></description><link>https://www.c-plusplus.net/forum/post/991384</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/991384</guid><dc:creator><![CDATA[DanielN]]></dc:creator><pubDate>Sat, 11 Feb 2006 10:16:09 GMT</pubDate></item><item><title><![CDATA[Reply to FindFirst geht nicht on Sat, 11 Feb 2006 10:53:27 GMT]]></title><description><![CDATA[<p>Die korrekte Version wäre natürlich:</p>
<pre><code class="language-cpp">WIN32_FIND_DATA finddata; 
TCHAR dirname[] = _T(&quot;f:\\*.*&quot;); 
hand = FindFirstFile(dirname, &amp;finddata);
</code></pre>
<p>Siehe auch: Listing the Files in a Directory<br />
<a href="http://msdn.microsoft.com/library/en-us/fileio/fs/listing_the_files_in_a_directory.asp" rel="nofollow">http://msdn.microsoft.com/library/en-us/fileio/fs/listing_the_files_in_a_directory.asp</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/991398</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/991398</guid><dc:creator><![CDATA[Jochen Kalmbach]]></dc:creator><pubDate>Sat, 11 Feb 2006 10:53:27 GMT</pubDate></item><item><title><![CDATA[Reply to FindFirst geht nicht on Sat, 11 Feb 2006 11:31:27 GMT]]></title><description><![CDATA[<p>ja so wie du es jetzt geschrieben hast hab ichs auch eingebaut und alles funktioniert ohne fehler NUR wird mir lediglich der erste Buchstabe vom Dateinamen ausgegeben, obwohl _tcslen(finddata.cFileName) jeweils die richtige Länge anzeigt.</p>
<p>Scheint mir so als ob gerade wieder alles schiefgeht was nur schiefgehen kann.</p>
<p>Gruß<br />
Daniel</p>
]]></description><link>https://www.c-plusplus.net/forum/post/991412</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/991412</guid><dc:creator><![CDATA[DanielN]]></dc:creator><pubDate>Sat, 11 Feb 2006 11:31:27 GMT</pubDate></item><item><title><![CDATA[Reply to FindFirst geht nicht on Sat, 11 Feb 2006 12:31:27 GMT]]></title><description><![CDATA[<p>printf durch wprintf ersetzen und es läuft. wer hätte das gedacht <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/991469</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/991469</guid><dc:creator><![CDATA[DanielN]]></dc:creator><pubDate>Sat, 11 Feb 2006 12:31:27 GMT</pubDate></item><item><title><![CDATA[Reply to FindFirst geht nicht on Sat, 11 Feb 2006 12:38:00 GMT]]></title><description><![CDATA[<p>Wenn du schon mit TCHAR's arbeitest, ist vielleicht _tprintf() am passendsten (das wird je nach UNICODE-Einstellungen als printf() oder wprintf() übersetzt).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/991474</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/991474</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Sat, 11 Feb 2006 12:38:00 GMT</pubDate></item><item><title><![CDATA[Reply to FindFirst geht nicht on Sat, 11 Feb 2006 14:20:55 GMT]]></title><description><![CDATA[<p>prinzipiell funktioniert die dateianzeige, nur es fehlen in jedem verzeichnis das ich bisher getestet habe immer ein paar dateien. Was kann das sein?</p>
<p>Gruß<br />
Daniel</p>
<pre><code>#define  _WIN32_WINNT  0x0501

#include &lt;windows.h&gt;
#include &lt;string.h&gt;
#include &lt;stdio.h&gt;
#include &lt;tchar.h&gt;

int main(void)
{
	WIN32_FIND_DATA finddata;
	HANDLE hand;
	_TCHAR dirname[]=_T(&quot;f:\\TEMP\\*.*&quot;);

	DWORD dw=GetLastError();

	hand=FindFirstFile(dirname,&amp;finddata);

	if (hand==INVALID_HANDLE_VALUE)
	{
	printf(&quot;Hier geht nix!\n&quot;);
	return(-1);
	}
	else
	{

wprintf(_T(&quot;%s\n&quot;),finddata.cFileName);
	while (FindNextFile(hand,&amp;finddata) !=0)
	{
		_tprintf(_T(&quot;%s\n&quot;),finddata.cFileName);

		FindNextFile(hand,&amp;finddata);
	}

	FindClose(hand);

	}	
return (0);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/991565</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/991565</guid><dc:creator><![CDATA[DanielN]]></dc:creator><pubDate>Sat, 11 Feb 2006 14:20:55 GMT</pubDate></item><item><title><![CDATA[Reply to FindFirst geht nicht on Sat, 11 Feb 2006 14:36:17 GMT]]></title><description><![CDATA[<p>Du rufst das &quot;FindNextFile&quot; immer doppelt auf... somit siehst Du nur jede 2. Datei...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/991586</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/991586</guid><dc:creator><![CDATA[Jochen Kalmbach]]></dc:creator><pubDate>Sat, 11 Feb 2006 14:36:17 GMT</pubDate></item><item><title><![CDATA[Reply to FindFirst geht nicht on Sat, 11 Feb 2006 18:53:10 GMT]]></title><description><![CDATA[<p>stimmt.. <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/991748</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/991748</guid><dc:creator><![CDATA[DanielN]]></dc:creator><pubDate>Sat, 11 Feb 2006 18:53:10 GMT</pubDate></item><item><title><![CDATA[Reply to FindFirst geht nicht on Sat, 11 Feb 2006 19:05:23 GMT]]></title><description><![CDATA[<p>wie sieht denn eigentlich der eleganteste Weg aus, um ein Verzeichnis von einer Datei zu unterscheiden, da GetFileAttributes ja anscheindend nur für Fat funktioniert.</p>
<p>Gruß<br />
Daniel</p>
]]></description><link>https://www.c-plusplus.net/forum/post/991756</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/991756</guid><dc:creator><![CDATA[DanielN]]></dc:creator><pubDate>Sat, 11 Feb 2006 19:05:23 GMT</pubDate></item><item><title><![CDATA[Reply to FindFirst geht nicht on Sat, 11 Feb 2006 19:07:25 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">if(finddata.dwFileAttributes &amp; FILE_ATTRIBUTE_DIRECTORY)
    ...
</code></pre>
<p>MfG SideWinder</p>
]]></description><link>https://www.c-plusplus.net/forum/post/991759</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/991759</guid><dc:creator><![CDATA[SideWinder]]></dc:creator><pubDate>Sat, 11 Feb 2006 19:07:25 GMT</pubDate></item><item><title><![CDATA[Reply to FindFirst geht nicht on Sat, 11 Feb 2006 19:14:33 GMT]]></title><description><![CDATA[<p>thank you</p>
<p>Gruß<br />
Daniel</p>
]]></description><link>https://www.c-plusplus.net/forum/post/991765</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/991765</guid><dc:creator><![CDATA[DanielN]]></dc:creator><pubDate>Sat, 11 Feb 2006 19:14:33 GMT</pubDate></item><item><title><![CDATA[Reply to FindFirst geht nicht on Sun, 12 Feb 2006 12:58:12 GMT]]></title><description><![CDATA[<p>ich fürchte das diese Frage jetzt eher ins C++ Forum gehört, aber ich möchte auch ungern den Zusammenhang hier zerreißen.</p>
<p>Meine Frage: Ich will die erkannten Dateinamen und Verzeichnisse in eine Liste Laden die ich dann Sortieren kann. Ist dies prizipiell mit Listen möglich, oder überhaupt die beste Lösung? Bei einem normalen Array hätte ich ja das Problem, dass ich das Einlesen zweimal durchführen müsste ( einmal zum Prüfen wieviele Elemente mein Array braucht und dann nochmal um die Werte einzutragen ).</p>
<p>Gruß<br />
Daniel</p>
<p>PS: Hab kein Beispiel gefunden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/992216</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/992216</guid><dc:creator><![CDATA[DanielN]]></dc:creator><pubDate>Sun, 12 Feb 2006 12:58:12 GMT</pubDate></item><item><title><![CDATA[Reply to FindFirst geht nicht on Mon, 13 Feb 2006 09:40:06 GMT]]></title><description><![CDATA[<p>DanielN schrieb:</p>
<blockquote>
<p>Meine Frage: Ich will die erkannten Dateinamen und Verzeichnisse in eine Liste Laden die ich dann Sortieren kann. Ist dies prizipiell mit Listen möglich,</p>
</blockquote>
<p>Ja, ist es, wobei ich eher Container mit wahlfreiem Zugriff vorziehen würde (vector/deque)</p>
<blockquote>
<p>oder überhaupt die beste Lösung?</p>
</blockquote>
<p>Beste Lösung wäre ein (multi)set, das sortiert die Elemente direkt beim Einfügen.</p>
<p>PS: Aber egal welchen Container du verwendest - pack' dort lieber string's (bzw. wstring's) rein als TCHAR*.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/992865</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/992865</guid><dc:creator><![CDATA[CStoll (off)]]></dc:creator><pubDate>Mon, 13 Feb 2006 09:40:06 GMT</pubDate></item><item><title><![CDATA[Reply to FindFirst geht nicht on Mon, 13 Feb 2006 10:33:52 GMT]]></title><description><![CDATA[<p>bei multi(set) kann ich dir leider nicht mehr folgen. Gibt es denn irgendwo im Netz ein Dokument mit Beispielen das den Umgang mit &lt;vectoren&gt; praktisch erklärt? Mir zeigt sich nicht der Sinn, wenn ich doch alles wie bei Arrays machen muss, sprich keine Erleichterung zu sehen ist.</p>
<p>Aber wie gesagt ich weiss nicht was du mit multi set meinst.</p>
<p>Gruß<br />
Daniel</p>
]]></description><link>https://www.c-plusplus.net/forum/post/992902</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/992902</guid><dc:creator><![CDATA[DanielN]]></dc:creator><pubDate>Mon, 13 Feb 2006 10:33:52 GMT</pubDate></item><item><title><![CDATA[Reply to FindFirst geht nicht on Mon, 13 Feb 2006 10:46:44 GMT]]></title><description><![CDATA[<p>Versuch's mal mit <a href="http://www.cppreference.com" rel="nofollow">www.cppreference.com</a> (oder in der MSDN).</p>
<p>Vectoren kannst du tatsächlich fast wie Arrays verwenden, allerdings können sie sich zur Laufzeit vergrößern, wenn sie mehr Platz brauchen:</p>
<pre><code class="language-cpp">vector&lt;wstring&gt; dir;
while(FindNextFile(hand,&amp;finddata) !=0) 
{
  dir.push_back(finddata.cFileName);//vergrößert den vector
}

sort(dir.begin(),dir.end());//Sortierung

for(vector&lt;wstring&gt;::iterator pos=dir.begin();pos!=dir.end();++pos)
  wcout&lt;&lt;*pos&lt;&lt;endl;
</code></pre>
<p>Set und Multiset sind <strong>geordnete</strong> Container (Multiset kann doppelte Werte enthalten), die ihre Elemente automatisch in aufsteigender Reihenfolge - ergo sparst du dir das Sortieren:</p>
<pre><code class="language-cpp">set&lt;wstring&gt; dir;
while(FindNextFile(hand,&amp;finddata) !=0) 
{
  dir.insert(finddata.cFileName);
}

for(vector&lt;wstring&gt;::iterator pos=dir.begin();pos!=dir.end();++pos)
  wcout&lt;&lt;*pos&lt;&lt;endl;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/992913</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/992913</guid><dc:creator><![CDATA[CStoll (off)]]></dc:creator><pubDate>Mon, 13 Feb 2006 10:46:44 GMT</pubDate></item><item><title><![CDATA[Reply to FindFirst geht nicht on Mon, 13 Feb 2006 11:32:44 GMT]]></title><description><![CDATA[<p>Ich danke dir, aber es ist doch nun wirklich so das Intern die Vectoren wie Arrays behandelt werden oder? Damit meine ich das keine neue Datenstruktur geschaffen wurde die sich zur Laufzeit in ihrer Größe ändern kann, weil ja vectoren für große Datenmengen genauso langsam werden wie Arrays die neu definiert werden und dann die alten Werte einfach kopieren + den neuen Wert. Da ich hier eine Verzeichnisauflistung programmieren will stellt sich mir nun die Frage ob es nicht wirklich schneller geht (bei 100000 Einträgen und mehr) die Routine zweimal auszuführen und dann das Kopieren zu sparen?</p>
<p>Ich werde deinen Vorschlag jetzt mal testen, weil er mindestens meine schwachen C++ Kenntnisse aufmöbelt.</p>
<p>Gruß<br />
Daniel</p>
]]></description><link>https://www.c-plusplus.net/forum/post/992957</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/992957</guid><dc:creator><![CDATA[DanielN]]></dc:creator><pubDate>Mon, 13 Feb 2006 11:32:44 GMT</pubDate></item><item><title><![CDATA[Reply to FindFirst geht nicht on Mon, 13 Feb 2006 11:41:26 GMT]]></title><description><![CDATA[<p>DanielN schrieb:</p>
<blockquote>
<p>Ich danke dir, aber es ist doch nun wirklich so das Intern die Vectoren wie Arrays behandelt werden oder? Damit meine ich das keine neue Datenstruktur geschaffen wurde die sich zur Laufzeit in ihrer Größe ändern kann, weil ja vectoren für große Datenmengen genauso langsam werden wie Arrays die neu definiert werden und dann die alten Werte einfach kopieren + den neuen Wert.</p>
</blockquote>
<p>Ja, die geben keine echten Vorteile (außer daß du bei manueller Programmierung vermutlich für jedes neue Element die ganze Sturktur kopieren würdest)</p>
<blockquote>
<p>Da ich hier eine Verzeichnisauflistung programmieren will stellt sich mir nun die Frage ob es nicht wirklich schneller geht (bei 100000 Einträgen und mehr) die Routine zweimal auszuführen und dann das Kopieren zu sparen?</p>
</blockquote>
<p>Hmm, da käme dann noch die deque in Frage. Die lässt sich genauso einsetzen wie ein vector und meines Wissens holt sie sich bei Überlauf lediglich einen neuen Speicherblock, in den sie dann weiterschreibt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/992963</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/992963</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 13 Feb 2006 11:41:26 GMT</pubDate></item></channel></rss>