2009-08-12 7 views
6

Ich versuche, ein paar Informationen des Benutzers Dokumente-Ordner zu schreiben (zB C:. \ Dokumente und Einstellungen \ [Benutzername]), aber ich kann nicht scheinen, um herauszufinden, wie das packen Pfad programmgesteuert. Gibt es eine Möglichkeit, dies zu tun? C++, nicht mit .NET.Schreiben auf Benutzerdokumente Ordner C++

Danke!

Antwort

16

SHGetFolderPath mit CSIDL_PERSONAL können die Benutzer-Ordner Dokumente erhalten verwendet werden.

WCHAR path[MAX_PATH]; 
HRESULT hr = SHGetFolderPath(NULL, CSIDL_PERSONAL, NULL, 
          SHGFP_TYPE_CURRENT, path); 
+0

Die Dokumentation impliziert Sie CSIDL_PERSONAL statt CSIDL_MYDOCUMENTS verwenden sollten. –

+1

Link zur Dokumentation :) http://technet.microsoft.com/en-us/library/cc749104(WS.10).aspx –

+0

CSIDL_PERSONAL & CSIDL_MYDOCUMENTS Synonyme sind. . . aber ja, ich mag die Konnotation von CSIDL_PERSONAL besser. – Michael

-2

Sie können dies tun:

wchar_t *pUSERPROFILE; 
size_t len; 
_wdupenv_s(&pUSERPROFILE, &len, L"USERPROFILE"); 
wstring userprofile = pUSERPROFILE; 
free (pUSERPROFILE);  

_wdupenv_s MSDN

+0

Sie wollen _wgetenv; Dies ist ein Speicherleck. Gutes Beispiel, wie die Microsoft "Security" -Erweiterungen tatsächlich kontraproduktiv sein können. – MSalters

+0

Natürlich sollten Sie frei (pUSERPROFILE); – anno

+0

Zum Beispiel: _wgetenv: "Durch das Zuordnen des Puffers selbst bietet _dupenv_s eine bequemere Alternative zu getenv_s, _wgetenv_s." – anno