2009-08-12 11 views
6

Estoy tratando de escribir algo de información en la carpeta de documentos del usuario (por ejemplo, C: \ Documents and Settings \ [userName]), pero parece que no puedo encontrar cómo agarrar el camino programáticamente. ¿Hay alguna manera de hacer esto? C++, no usa .NET.Escribiendo en la carpeta de documentos de usuario C++

Gracias!

Respuesta

16

SHGetFolderPath con CSIDL_PERSONAL se puede utilizar para obtener la carpeta Documentos del usuario.

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

de la documentación, se debe utilizar en lugar de CSIDL_PERSONAL CSIDL_MYDOCUMENTS. –

+1

enlace a la documentación :) http://technet.microsoft.com/en-us/library/cc749104(WS.10).aspx –

+0

CSIDL_PERSONAL & CSIDL_MYDOCUMENTS son sinónimos. . . pero sí, me gusta más la connotación de CSIDL_PERSONAL. – Michael

-2

Usted puede hacer esto:

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

_wdupenv_s MSDN

+0

Quiere _wgetenv; esta es una pérdida de memoria Buen ejemplo de cómo las extensiones de "seguridad" de Microsoft pueden ser contraproducentes en realidad. – MSalters

+0

Por supuesto, debe liberar (pUSERPROFILE); – anno

+0

En cuanto a, _wgetenv: "Al asignar el búfer en sí, _dupenv_s proporciona una alternativa más conveniente a getenv_s, _wgetenv_s". – anno

Cuestiones relacionadas