<?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[Allgemeiner Zugriff auf Standardfolder......]]></title><description><![CDATA[<p>Hallo,</p>
<p>irgendwie bin ich scheinbar zu doof zum Suchen..... Ich möchte in einem Programm eine Textdatei auslesen, die sich in den 'eigenen Dateien' (mydocuments) befindet. Das kann doch nicht so schwer sein - dachte ich.....</p>
<p>Als erstes fand ich <code>SHGetSpecialFolderLocation()</code> . Das was ich dazu gefunden habe, war ein Beitrag, der zu Windows NT passte. Da hatte die Funktion 4 Argumente und als Target kam ein char name[MAX_PATH]. Die aktuelle Version unter WinXP hat nur 3 Argumente und liefert eine _ITEMIDLIST*. Damit kann ich nichts anfangen.</p>
<p>Zudem wird bei MSDN erklärt, dass dies eine veraltete Funktion sei, die bei neueren Windowsversionen nicht mehr unterstützt wird. Man solle doch statt dessen GetFolderPath() verwenden - mit dem freundlichen Hinweis, dass dies nicht mit virtuellen Ordnern funktioniert.</p>
<p>Wie bekomme ich in c++ (nicht VC++) den Pfad zu den eigenen Dateien und zwar unabhängig von user und eingestellter Sprache?</p>
<p>Vielen Dank für eure Geduld...<br />
Jens <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/topic/305272/allgemeiner-zugriff-auf-standardfolder</link><generator>RSS for Node</generator><lastBuildDate>Sun, 09 Aug 2026 01:15:07 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/305272.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 25 Jun 2012 12:27:40 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Allgemeiner Zugriff auf Standardfolder...... on Mon, 25 Jun 2012 12:27:40 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>irgendwie bin ich scheinbar zu doof zum Suchen..... Ich möchte in einem Programm eine Textdatei auslesen, die sich in den 'eigenen Dateien' (mydocuments) befindet. Das kann doch nicht so schwer sein - dachte ich.....</p>
<p>Als erstes fand ich <code>SHGetSpecialFolderLocation()</code> . Das was ich dazu gefunden habe, war ein Beitrag, der zu Windows NT passte. Da hatte die Funktion 4 Argumente und als Target kam ein char name[MAX_PATH]. Die aktuelle Version unter WinXP hat nur 3 Argumente und liefert eine _ITEMIDLIST*. Damit kann ich nichts anfangen.</p>
<p>Zudem wird bei MSDN erklärt, dass dies eine veraltete Funktion sei, die bei neueren Windowsversionen nicht mehr unterstützt wird. Man solle doch statt dessen GetFolderPath() verwenden - mit dem freundlichen Hinweis, dass dies nicht mit virtuellen Ordnern funktioniert.</p>
<p>Wie bekomme ich in c++ (nicht VC++) den Pfad zu den eigenen Dateien und zwar unabhängig von user und eingestellter Sprache?</p>
<p>Vielen Dank für eure Geduld...<br />
Jens <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/2226980</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2226980</guid><dc:creator><![CDATA[xenayoo]]></dc:creator><pubDate>Mon, 25 Jun 2012 12:27:40 GMT</pubDate></item><item><title><![CDATA[Reply to Allgemeiner Zugriff auf Standardfolder...... on Mon, 25 Jun 2012 12:40:06 GMT]]></title><description><![CDATA[<p>xenayoo schrieb:</p>
<blockquote>
<p>Wie bekomme ich in c++ (nicht VC++) den Pfad zu den eigenen Dateien</p>
</blockquote>
<p>Gar nicht.</p>
<p>xenayoo schrieb:</p>
<blockquote>
<p>und zwar unabhängig von user</p>
</blockquote>
<p>Das ergibt keinen Sinn. Jeder Benutzer hat eigene <strong>Eigene</strong> Dateien.</p>
<p>xenayoo schrieb:</p>
<blockquote>
<p>und eingestellter Sprache?</p>
</blockquote>
<p>Was hat das damit zu tun?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2226986</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2226986</guid><dc:creator><![CDATA[TyRoXx]]></dc:creator><pubDate>Mon, 25 Jun 2012 12:40:06 GMT</pubDate></item><item><title><![CDATA[Reply to Allgemeiner Zugriff auf Standardfolder...... on Mon, 25 Jun 2012 12:41:08 GMT]]></title><description><![CDATA[<p>xenayoo schrieb:</p>
<blockquote>
<p>Zudem wird bei MSDN erklärt, dass dies eine veraltete Funktion sei, die bei neueren Windowsversionen nicht mehr unterstützt wird. Man solle doch statt dessen GetFolderPath() verwenden</p>
</blockquote>
<p>Komisch, den Hinweis hab ich gar nicht gesehen. Stattdessen bin ich (über Umwege) bei <a href="http://msdn.microsoft.com/en-us/library/windows/desktop/bb762188%28v=vs.85%29.aspx" rel="nofollow">SHGetKnownFolderPath</a> gelandet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2226988</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2226988</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Mon, 25 Jun 2012 12:41:08 GMT</pubDate></item><item><title><![CDATA[Reply to Allgemeiner Zugriff auf Standardfolder...... on Mon, 25 Jun 2012 12:56:55 GMT]]></title><description><![CDATA[<p>TyRoXx schrieb:</p>
<blockquote>
<p>xenayoo schrieb:</p>
<blockquote>
<p>Wie bekomme ich in c++ (nicht VC++) den Pfad zu den eigenen Dateien</p>
</blockquote>
<p>Gar nicht.</p>
<p>xenayoo schrieb:</p>
<blockquote>
<p>und zwar unabhängig von user</p>
</blockquote>
<p>Das ergibt keinen Sinn. Jeder Benutzer hat eigene <strong>Eigene</strong> Dateien.</p>
<p>xenayoo schrieb:</p>
<blockquote>
<p>und eingestellter Sprache?</p>
</blockquote>
<p>Was hat das damit zu tun?</p>
</blockquote>
<p>Man kann sich echt auch bewusst dumm stellen... <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="🙄"
    /><br />
Das er &quot;Eigene Dateien&quot; vom aktuell eingeloggten Benutzer haben will, kann man eigentlich schon aus der Frage erkennen. Und das mit der &quot;eigestellten Sprache&quot; (englisches System &lt;-&gt; deutsches System -&gt; &quot;My Documents&quot; &lt;-&gt; &quot;Eigene Dateien&quot;) gemeint ist, kann man auch verstehen.<br />
Leider ist das unter Windows ziemlich vermurkst. Ich habe auch nichts besseres als das, was Basher vorschlägt, gefunden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2226997</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2226997</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Mon, 25 Jun 2012 12:56:55 GMT</pubDate></item><item><title><![CDATA[Reply to Allgemeiner Zugriff auf Standardfolder...... on Mon, 25 Jun 2012 12:58:02 GMT]]></title><description><![CDATA[<p>Hallo TyRoXx,</p>
<p>das Programm soll den Pfad zu 'My Documents' emitteln - und zwar Rechnerunabhängig. 'Gar nicht' ist eine sehr hilfreiche Aussage, die wohl so nicht stimmt.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/904">@Bashar</a>:</p>
<p>vielleicht hätte ich dazu schreiben sollen: Es handelt sich um Windows XP. Bei SHGetKnownFolderPath steht Vista als Minimum Requirement dabei. Außerdem hab ich keine FolderID für die eigenen Dateien gefunden.</p>
<p>Jens</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2226998</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2226998</guid><dc:creator><![CDATA[xenayoo]]></dc:creator><pubDate>Mon, 25 Jun 2012 12:58:02 GMT</pubDate></item><item><title><![CDATA[Reply to Allgemeiner Zugriff auf Standardfolder...... on Mon, 25 Jun 2012 13:07:28 GMT]]></title><description><![CDATA[<p>xenayoo schrieb:</p>
<blockquote>
<p>das Programm soll den Pfad zu 'My Documents' emitteln - und zwar Rechnerunabhängig. 'Gar nicht' ist eine sehr hilfreiche Aussage, die wohl so nicht stimmt.</p>
</blockquote>
<p>Doch sie stimmt. Mit reinem C++ kannst du diese Information nicht bekommen. Hierfür muss eine OS spezifische API verwendet werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2227002</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2227002</guid><dc:creator><![CDATA[firefly_]]></dc:creator><pubDate>Mon, 25 Jun 2012 13:07:28 GMT</pubDate></item><item><title><![CDATA[Reply to Allgemeiner Zugriff auf Standardfolder...... on Mon, 25 Jun 2012 13:15:09 GMT]]></title><description><![CDATA[<p>xenayoo schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/904">@Bashar</a>:</p>
<p>vielleicht hätte ich dazu schreiben sollen: Es handelt sich um Windows XP. Bei SHGetKnownFolderPath steht Vista als Minimum Requirement dabei. Außerdem hab ich keine FolderID für die eigenen Dateien gefunden.</p>
</blockquote>
<p>Dann halt <a href="http://msdn.microsoft.com/en-us/library/windows/desktop/bb762181%28v=vs.85%29.aspx" rel="nofollow">SHGetFolderPath</a></p>
<p>Als CSIDL nimmst du CSIDL_MYDOCUMENTS.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2227004</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2227004</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Mon, 25 Jun 2012 13:15:09 GMT</pubDate></item><item><title><![CDATA[Reply to Allgemeiner Zugriff auf Standardfolder...... on Mon, 25 Jun 2012 13:17:30 GMT]]></title><description><![CDATA[<p>Guckst du:<br />
<a href="http://msdn.microsoft.com/en-us/library/windows/desktop/bb762181%28v=vs.85%29.aspx" rel="nofollow">SHGetFolderPath()</a><br />
<a href="http://www.codeproject.com/Articles/24308/Accessing-All-of-Windows-Special-Folders#TableCSIDL" rel="nofollow">Accessing-All-of-Windows-Special-Folders#TableCSIDL</a></p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

#include &lt;Shlobj.h&gt;

int main()
{
	char path[ MAX_PATH ];
	SHGetFolderPathA( nullptr, CSIDL_PERSONAL | CSIDL_FLAG_CREATE, nullptr, 0, path );
	std::cout &lt;&lt; path &lt;&lt; std::endl;
}
</code></pre>
<p>// edit: too late.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2227005</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2227005</guid><dc:creator><![CDATA[Swordfish]]></dc:creator><pubDate>Mon, 25 Jun 2012 13:17:30 GMT</pubDate></item><item><title><![CDATA[Reply to Allgemeiner Zugriff auf Standardfolder...... on Mon, 25 Jun 2012 13:30:12 GMT]]></title><description><![CDATA[<p>Bashar schrieb:</p>
<blockquote>
<p>Dann halt <a href="http://msdn.microsoft.com/en-us/library/windows/desktop/bb762181%28v=vs.85%29.aspx" rel="nofollow">SHGetFolderPath</a></p>
<p>Als CSIDL nimmst du CSIDL_MYDOCUMENTS.</p>
</blockquote>
<p>Hallo Bashar,</p>
<p>mit SHGetFolderPath habe ich es bereits versucht:</p>
<pre><code class="language-cpp">char szBuffer[MAX_PATH];
if(SHGetFolderPath( HWND_DESKTOP, CSIDL_PERSONAL, NULL, SHGFP_TYPE_CURRENT, szBuffer);
{
    MessageBox(...);
}
else
{
    MessageBox(...);
}
</code></pre>
<p>Das lässt sich fehlerfrei kompilieren. Allerdings Bekomme ich immer nur die Messagebox aus else gezeigt. Laut MSDN-Homepage wirft die Funktion bei virtuellen Ordnern einen Fehler aus. BTW: auch CSIDL_MYDOCUMENTS gibt es erst ab Vista - davor hieß es CSIDL_PERSONAL.</p>
<p>Jens</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2227009</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2227009</guid><dc:creator><![CDATA[xenayoo]]></dc:creator><pubDate>Mon, 25 Jun 2012 13:30:12 GMT</pubDate></item><item><title><![CDATA[Reply to Allgemeiner Zugriff auf Standardfolder...... on Mon, 25 Jun 2012 13:57:32 GMT]]></title><description><![CDATA[<p>Was vielleicht noch gehen könnte, ist ein Zugriff auf die Registry:</p>
<pre><code class="language-cpp">class user_reg_value
{
public:
    user_reg_value(std::string const &amp; key)
    {
        LONG r = RegOpenKeyA(HKEY_CURRENT_USER, key.c_str(), &amp;m_key);
        if(ERROR_SUCCESS != r)
        {
            throw std::runtime_error(&quot;bad thing&quot;);
        } 
    }

    ~user_reg_value()
    {
        RegCloseKey(m_key);
    }

    std::string query(std::string const &amp; value_name)
    {
        DWORD size = 0;
        LONG r = RegQueryValueExA(m_key, value_name.c_str(), 0, 0, 0, &amp;size);
        if(ERROR_SUCCESS != r)
        {
            throw std::runtime_error(&quot;bad thing&quot;);
        }
        std::vector&lt;BYTE&gt; buff(size);
        r = RegQueryValueExA(m_key, value_name.c_str(), 0, 0, &amp;buff.front(), &amp;size);
        if(ERROR_SUCCESS != r)
        {
            throw std::runtime_error(&quot;bad thing&quot;);
        }
        return std::string(buff.begin(), buff.end());
    }

private:
    HKEY m_key;
};

int main()
{
    user_reg_value val(&quot;Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders&quot;);
    std::cout &lt;&lt; val.query(&quot;Personal&quot;); 
}
</code></pre>
<p>In <code>Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders\\Personal</code> steht, auf den von mir geprüften Systemen, immer der richtige Pfad. Wenn jemand noch 'ne bessere Methode kennt, die Länge das auszulesenden Wertes zu ermitteln, dann her damit.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2227012</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2227012</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Mon, 25 Jun 2012 13:57:32 GMT</pubDate></item><item><title><![CDATA[Reply to Allgemeiner Zugriff auf Standardfolder...... on Mon, 25 Jun 2012 14:49:46 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Asche auf mein Haupt. Die Funktion arbeitet einwandfrei. Ich habe nur etwas gebraucht, biss ich die Rückgabewerte der Funktion verstanden habe:<br />
Rückgabetyp HRESULT</p>
<p>Das bedeutet, wenn die Funktion S_OK liefert ist HRESULT == 0, d.h. false. Logisch, dass dann immer der ese-Teil meines Codes ausgefüht wird.</p>
<p>Lösung:</p>
<pre><code class="language-cpp">HRESULT HRwert = SHGetFolderPath( HWND_DESKTOP, CSIDL_PERSONAL, NULL, SHGFP_TYPE_CURRENT, szBuffer);
if(HRwert == 0)
{.....}
</code></pre>
<p>Danke an alle.</p>
<p>Jens</p>
<p>Frage: Kennt jemand vielleicht einen Artikel mit den verschiedenen Zeichenketten und strings (cons char *name; Cstring; LPSTRING; c++ stringklasse; etc) und wie man mit ihnen umgeht sowie umwandlung?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2227039</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2227039</guid><dc:creator><![CDATA[xenayoo]]></dc:creator><pubDate>Mon, 25 Jun 2012 14:49:46 GMT</pubDate></item><item><title><![CDATA[Reply to Allgemeiner Zugriff auf Standardfolder...... on Mon, 25 Jun 2012 15:09:00 GMT]]></title><description><![CDATA[<p>edit: hab mich vertan - sollte ein neuer Thread werden...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2227050</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2227050</guid><dc:creator><![CDATA[xenayoo]]></dc:creator><pubDate>Mon, 25 Jun 2012 15:09:00 GMT</pubDate></item></channel></rss>