<?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[.exe-Pfad herausfinden]]></title><description><![CDATA[<p>Hallo,</p>
<p>zur Zeit versuche ich eine Möglichkeit zu finden, meinem Programm den Pfad seiner .exe Datei bekannt zu machen. Bin soweit gekommen:</p>
<pre><code class="language-cpp">void initialize()
{
	char Filename[400];
    GetModuleFileName(NULL,(LPWCH)Filename,400);
	for(int i = 0; i &lt;= 400; i+=2)
		cout &lt;&lt;Filename[i];
}
</code></pre>
<p>Allerdings finde ich das extrem umständlich. Nach jedem Zeiche innerhalb des Pfades fügt die Funktion GetModuleFileName() der Variablem offenbar ein Leerzeichen ein, sodass der string unnötig lang wird. Die Aussgabe ist nicht so wichtig. Mich würde generell interessieren, ob es keine bessere Möglichkeit gibt, den Pfad auszulesen?</p>
<p>Danke schonmal für die Hilfe</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/232612/exe-pfad-herausfinden</link><generator>RSS for Node</generator><lastBuildDate>Fri, 25 Sep 2026 06:43:09 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/232612.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 24 Jan 2009 20:33:48 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to .exe-Pfad herausfinden on Sat, 24 Jan 2009 20:33:48 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>zur Zeit versuche ich eine Möglichkeit zu finden, meinem Programm den Pfad seiner .exe Datei bekannt zu machen. Bin soweit gekommen:</p>
<pre><code class="language-cpp">void initialize()
{
	char Filename[400];
    GetModuleFileName(NULL,(LPWCH)Filename,400);
	for(int i = 0; i &lt;= 400; i+=2)
		cout &lt;&lt;Filename[i];
}
</code></pre>
<p>Allerdings finde ich das extrem umständlich. Nach jedem Zeiche innerhalb des Pfades fügt die Funktion GetModuleFileName() der Variablem offenbar ein Leerzeichen ein, sodass der string unnötig lang wird. Die Aussgabe ist nicht so wichtig. Mich würde generell interessieren, ob es keine bessere Möglichkeit gibt, den Pfad auszulesen?</p>
<p>Danke schonmal für die Hilfe</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1651696</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1651696</guid><dc:creator><![CDATA[Don Quijote]]></dc:creator><pubDate>Sat, 24 Jan 2009 20:33:48 GMT</pubDate></item><item><title><![CDATA[Reply to .exe-Pfad herausfinden on Sat, 24 Jan 2009 20:53:27 GMT]]></title><description><![CDATA[<p>Schau dir das mal an:<br />
<a href="http://msdn.microsoft.com/en-us/library/aa364934(VS.85).aspx" rel="nofollow">http://msdn.microsoft.com/en-us/library/aa364934(VS.85).aspx</a></p>
<p>Alternativ sei noch auf die plattformunabhängige Variante in boost hingewiesen:<br />
<a href="http://www.boost.org/doc/libs/1_37_0/libs/filesystem/doc/index.htm" rel="nofollow">http://www.boost.org/doc/libs/1_37_0/libs/filesystem/doc/index.htm</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1651707</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1651707</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sat, 24 Jan 2009 20:53:27 GMT</pubDate></item><item><title><![CDATA[Reply to .exe-Pfad herausfinden on Sat, 24 Jan 2009 21:12:09 GMT]]></title><description><![CDATA[<p>Danke erstmal.</p>
<p>Das mit GetCurrentDirectory habe ich mir schon angeschaut, aber bin nicht weiter gekommen. Mir gelingt es nicht aus einem string ein LPWSTR zu machen.<br />
Hier mal mein Versuch:</p>
<pre><code class="language-cpp">unsigned short length = GetCurrentDirectory(0, NULL);
	string Filename;
	GetCurrentDirectory(length+1, (LPWSTR) Filename);
	for(int i = 0;i &lt;= length-1; i++)
		cout &lt;&lt;Filename[i];
</code></pre>
<p>Fehlermeldung:</p>
<pre><code>haupt.cpp(25) : error C2440: 'type cast' : cannot convert from 'std::string' to 'LPWSTR'
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1651713</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1651713</guid><dc:creator><![CDATA[Don Quijote]]></dc:creator><pubDate>Sat, 24 Jan 2009 21:12:09 GMT</pubDate></item><item><title><![CDATA[Reply to .exe-Pfad herausfinden on Sat, 24 Jan 2009 21:16:48 GMT]]></title><description><![CDATA[<p>LPWSTR = long pointer to wide string<br />
-&gt; wchar_t*<br />
wstring duerfte also schonmal passender sein, aber mit wstring::c_str kriegst du auch nur ein wchar_t const* und nicht so leicht ein wchar_t*, muesstest also kopieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1651716</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1651716</guid><dc:creator><![CDATA[JustAnotherNoob]]></dc:creator><pubDate>Sat, 24 Jan 2009 21:16:48 GMT</pubDate></item><item><title><![CDATA[Reply to .exe-Pfad herausfinden on Sat, 24 Jan 2009 21:20:26 GMT]]></title><description><![CDATA[<p>Naja, dann bin ich ja mit meiner ersten Methode noch schneller.</p>
<p>Was ist denn der Unterschied zwischen wstring und string?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1651718</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1651718</guid><dc:creator><![CDATA[Don Quijote]]></dc:creator><pubDate>Sat, 24 Jan 2009 21:20:26 GMT</pubDate></item><item><title><![CDATA[Reply to .exe-Pfad herausfinden on Sat, 24 Jan 2009 21:26:54 GMT]]></title><description><![CDATA[<p>wstring nutzt wchar_t als Zeichen und string benutzt char als Zeichen, hast in den Projekteinstellungen wohl widestrings eingestellt, kannst auch multibyte nehmen.<br />
ich denke folgendes, duerfts tun(sofern der Rest deines Codes korrekt ist, da ich von ihm ausgehen werde):</p>
<pre><code class="language-cpp">unsigned short length = GetCurrentDirectory(0, NULL);
    vector&lt;wchar_t&gt; Filename(length);
    GetCurrentDirectory(length+1, &amp;Filename[0]);
    for(int i = 0;i &lt;= length-1; i++)
        cout &lt;&lt;Filename[i];
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1651720</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1651720</guid><dc:creator><![CDATA[JustAnotherNoob]]></dc:creator><pubDate>Sat, 24 Jan 2009 21:26:54 GMT</pubDate></item><item><title><![CDATA[Reply to .exe-Pfad herausfinden on Sat, 24 Jan 2009 21:29:46 GMT]]></title><description><![CDATA[<p>Ok, danke schonmal für die Hilfe.</p>
<p>Werde mir das wohl nochmal anschauen müssen. Mit vektoren habe ich noch nicht gearbeitet. Aber hilfreich wird es auf jeden Fall sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1651721</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1651721</guid><dc:creator><![CDATA[Don Quijote]]></dc:creator><pubDate>Sat, 24 Jan 2009 21:29:46 GMT</pubDate></item><item><title><![CDATA[Reply to .exe-Pfad herausfinden on Sat, 24 Jan 2009 21:35:57 GMT]]></title><description><![CDATA[<p>length+1 übergeben, obwohl nur platz für length da ist. das ist nicht lieb von dir. <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1651724</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1651724</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Sat, 24 Jan 2009 21:35:57 GMT</pubDate></item><item><title><![CDATA[Reply to .exe-Pfad herausfinden on Sat, 24 Jan 2009 23:09:43 GMT]]></title><description><![CDATA[<p>wieso nimmste std::vector &lt;wchar_t&gt; und nicht gleich std::wstring? Oo</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1651779</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1651779</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Sat, 24 Jan 2009 23:09:43 GMT</pubDate></item><item><title><![CDATA[Reply to .exe-Pfad herausfinden on Sat, 24 Jan 2009 23:18:12 GMT]]></title><description><![CDATA[<p>unskilled schrieb:</p>
<blockquote>
<p>wieso nimmste std::vector &lt;wchar_t&gt; und nicht gleich std::wstring? Oo</p>
</blockquote>
<p>wegen der speicher-am-stück-sei-garantie für begin()-end(), nehme ich an.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1651783</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1651783</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Sat, 24 Jan 2009 23:18:12 GMT</pubDate></item><item><title><![CDATA[Reply to .exe-Pfad herausfinden on Sun, 25 Jan 2009 10:54:38 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>unskilled schrieb:</p>
<blockquote>
<p>wieso nimmste std::vector &lt;wchar_t&gt; und nicht gleich std::wstring? Oo</p>
</blockquote>
<p>wegen der speicher-am-stück-sei-garantie für begin()-end(), nehme ich an.</p>
</blockquote>
<p>Hmm.... ok ^^ schon mal ne string-implementation gesehen, wo das nicht der fall war? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_tongue"
      title=":-P"
      alt="😛"
    /><br />
ich weiß, der standard garantiert das nicht - aber es liegt imho auf der hand...</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1651898</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1651898</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Sun, 25 Jan 2009 10:54:38 GMT</pubDate></item><item><title><![CDATA[Reply to .exe-Pfad herausfinden on Sun, 25 Jan 2009 13:57:35 GMT]]></title><description><![CDATA[<p>Das Current oder Working Directory muss nicht der Pfad sien in dem deine exe liegt. Da ist GetModuleFileName schon das richtige. Aber was willst du überhaupt machen? Userdaten gehören nicht da hin.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1651998</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1651998</guid><dc:creator><![CDATA[also]]></dc:creator><pubDate>Sun, 25 Jan 2009 13:57:35 GMT</pubDate></item><item><title><![CDATA[Reply to .exe-Pfad herausfinden on Sun, 25 Jan 2009 14:23:37 GMT]]></title><description><![CDATA[<p>Naja, also mein Programm muss auf jeden Fall, wenn man damit arbeitet bestimmte Ordnerstrukturen erstellen. Diese Struktur ist aber abhängig von den Eingaben des Benutzers. Ich möchte, dass diese Ordnersstrukturen und auch Dateien innerhalb des Ordners der .exe Datei angelegt werden bzw. in einem Ordner, der in dem Ordner, wo die .exe Datei liegt, bereits existiert.</p>
<p>Ich habe gestern 2 Stunden dran rumprobiert und bin nicht wirklich weiter gekommen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1652018</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1652018</guid><dc:creator><![CDATA[Don Quijote]]></dc:creator><pubDate>Sun, 25 Jan 2009 14:23:37 GMT</pubDate></item><item><title><![CDATA[Reply to .exe-Pfad herausfinden on Sun, 25 Jan 2009 16:14:14 GMT]]></title><description><![CDATA[<p>So hab das jetzt soweit. Jetzt habe ich allerdings ein neues Problem:</p>
<p>Ich kann mit CreateDirectory() und einem char* keinen Ordner erstellen.</p>
<p>Ich müsste meinen Pfad in LPWCSTR umwandeln, was mir allerdings nicht gelingt.</p>
<pre><code class="language-cpp">unsigned short S = GetCurrentDirectory(0, NULL);
	S += 16;

	char *Filename =new char[2*S];
    GetModuleFileName(NULL, (LPWCH)Filename, 2*S);
    string NAME;
	cout &lt;&lt;&quot;Geben sie bitte den Namen des Ordners ein: &quot;;
	cin &gt;&gt;NAME;

	char *path = new char [110];
	for(int i = 0; i &lt;= S-11;i++)
		path[i] = Filename[2*i];
	for(int i = S-10; i &lt;= S - 11 + NAME.length(); i++)
		path[i] = NAME[i-(S-10)];

    for(int i = 0; i &lt;= S - 11 + NAME.length(); i++)
		cout &lt;&lt;path[i];

	CreateDirectory((LPCWSTR)????, NULL);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1652100</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1652100</guid><dc:creator><![CDATA[Don Quijote]]></dc:creator><pubDate>Sun, 25 Jan 2009 16:14:14 GMT</pubDate></item><item><title><![CDATA[Reply to .exe-Pfad herausfinden on Sun, 25 Jan 2009 16:23:47 GMT]]></title><description><![CDATA[<p>Nimm vielleicht mal <code>wchar_t</code> statt <code>char</code> - denn LPC<strong>W</strong>STR erwartet einen Wide-String.</p>
<p>P.S. Gibst du den mit <code>new</code> angeforderten Speicherbereich wieder irgendwo frei?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1652106</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1652106</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 25 Jan 2009 16:23:47 GMT</pubDate></item><item><title><![CDATA[Reply to .exe-Pfad herausfinden on Sun, 25 Jan 2009 17:08:05 GMT]]></title><description><![CDATA[<p>So wie ich das sehe, ändert das aber nicht daran, dass ich trotzdem eine Umwandlung durchführen muss, denn Benutzereingaben kann ich dann ja nicht in wchar_t speichern, oder?</p>
<p>btw.: Was soll das eigentlich, dass man zehn verschiedene Zeichen-Datentypen verwendet, anstatt sich mal auf eine zu einigen?</p>
<p>Den Speicher, den ich anfordere gebe ich an späterer Stelle wieder frei.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1652126</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1652126</guid><dc:creator><![CDATA[Don Quijote]]></dc:creator><pubDate>Sun, 25 Jan 2009 17:08:05 GMT</pubDate></item><item><title><![CDATA[Reply to .exe-Pfad herausfinden on Sun, 25 Jan 2009 17:22:29 GMT]]></title><description><![CDATA[<p>stell dein Projekt auf Multibyte statt Unicode und du kannst mit char arbeiten, ansonsten ist wchar_t was du brauchst.<br />
folgendes:<br />
LPSTR = char*<br />
LPWSTR = wchar_t*<br />
LPCSTR = char const*<br />
LPCWSTR = wchar_t const*</p>
<p>wann immer in der WINAPI steht LPTSTR oder LPCTSTR duerfte das glaub ich bedeuten, dass je nach Projekteinstellung(Unicode/Multibyte) die char oder wchar_t Varianten genommen werden.</p>
<p>anstatt den dynamischen Arrays kannst du auch vectoren verwenden, da &amp;vector[0] garantiert ein normales, passendes Array zurueckgibt(afaik als einziger Container) und dann kannst du dir das delete[] sparen(und hast ausserdem noch weitere Vorteile, wenn du es auch an anderer Stelle verwendest).</p>
<p>wenn du einen wstring hast, und daraus ein vector&lt;wchar_t&gt; machen willst, geht das folgendermassen:<br />
vector&lt;wchar_t&gt; wstr(str.begin(), str.end());<br />
andersrum genau so.<br />
mit einem string duerfte das auch funktionieren, koenntest aber evtl. Probleme kriegen, da dabei nicht die Kodierung konvertiert wird, sondern einfach der Wert gecastet wird - solltest du die Konsole verwenden wollen, nimm einfach kein Unicodeprojekt.<br />
Das ganze geht mit vector&lt;char&gt; natuerlich genau so!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1652140</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1652140</guid><dc:creator><![CDATA[JustAnotherNoob]]></dc:creator><pubDate>Sun, 25 Jan 2009 17:22:29 GMT</pubDate></item><item><title><![CDATA[Reply to .exe-Pfad herausfinden on Sun, 25 Jan 2009 18:02:32 GMT]]></title><description><![CDATA[<p>Also wenn ich mein Projekt auf Multibyte umstelle, dann würde folgendes gehen?</p>
<pre><code class="language-cpp">char *file...;
CreateDirectory(file,NULL);
</code></pre>
<p>Ich versteh das nicht so ganz....der DAtentyp einer Funktion ändert sich doch nicht wegen einer Projekteinstellung. Oder wird eine andere Überladung verwendet?</p>
<p>Wo stele ich denn auf Multibyte um?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1652168</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1652168</guid><dc:creator><![CDATA[Don Quijote]]></dc:creator><pubDate>Sun, 25 Jan 2009 18:02:32 GMT</pubDate></item><item><title><![CDATA[Reply to .exe-Pfad herausfinden on Sun, 25 Jan 2009 18:08:00 GMT]]></title><description><![CDATA[<p>die Projekteinstellung setzt ein define, _UNICODE oder UNICODE, wodurch die Typen der WINAPI (TCHAR, LPTSTR, LPCTSTR u.s.w.) entsprechend veraendern</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1652175</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1652175</guid><dc:creator><![CDATA[JustAnotherNoob]]></dc:creator><pubDate>Sun, 25 Jan 2009 18:08:00 GMT</pubDate></item><item><title><![CDATA[Reply to .exe-Pfad herausfinden on Sun, 25 Jan 2009 21:29:21 GMT]]></title><description><![CDATA[<p>Ah...danke...habs gefunden...So dann werd ich mal schaun, was ich verändern muss.</p>
<p>Edit: So hab jetzt alles geändert. Das Speichern funktioniert wunderbar und das Übergebend er Argumente an CreateDirectory() auch.</p>
<p>Das einzige Problem besteht jetzt nur noch darin, dass CreateDirectory kein Verzeichnis erstellt.</p>
<pre><code class="language-cpp">unsigned short S = GetCurrentDirectory(0, NULL);
	string NAME;
	cout &lt;&lt;&quot;Geben sie bitte den Namen des Ordners ein: &quot;;
	cin &gt;&gt;NAME;

	//Verzeichnis speichern
	char *Filename =new char[S];
    GetModuleFileName(NULL, Filename, S);

    //Name des neuen Ordners dem Pfad hinzufügen
	S += NAME.length();
	char *path =new char[S];
	for(int i = 0;i &lt; S-NAME.length();i++)
		path[i] = Filename[i];
    for(int i = S-NAME.length(); i &lt; S; i++)
		path[i] = NAME[i-(S-NAME.length())];
	//&quot;\&quot; Entfernen 
	for(int i = 0; i &lt; S; i++)
		if(path[i] == '\\')
			path[i] = '/';

    //Pfad ausgeben
	for(int i = 0; i &lt;= S - 1;i++)
		cout &lt;&lt;path[i];

	//Neuen Ordner Erstellen
	CreateDirectory(path, NULL);
</code></pre>
<p>Wenn ich anstatt der Zeigers path &quot;c:/Test&quot; als Pfad übergebe, dann erstellt Create Directory den Pfad ohne Probleme.</p>
<p>Edit: Habs hinbekommen, habe nur vergessen dem char array &quot;path&quot; ein '\0' am Ende anzufügen. <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/1652193</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1652193</guid><dc:creator><![CDATA[Don Quijote]]></dc:creator><pubDate>Sun, 25 Jan 2009 21:29:21 GMT</pubDate></item></channel></rss>