2012-06-21 5 views
1

Я пытаюсь разобрать SHGetSpecialFolderPath в строку, System::String^, если быть точным.
Я теперь использую этот код:SHGetSpecialFolderPath к системе :: String^

TCHAR appDataPath; 
SHGetSpecialFolderPath(0, appDataPath, CSIDL_APPDATA, false); 

Я пытался что-то вроде этого, но это не работает, либо:

LPWSTR appDataPath; 
SHGetSpecialFolderPath(0, appDataPath, CSIDL_APPDATA, false); 

Я просто хочу, чтобы получить System::String^ так:

System::String^loc_inst = appDataPath + "\\inst\\info.xml"; 
+2

Используйте среду :: GetFolderPath() вместо этого. –

ответ

1

Я не думаю, что C++/CLI может автоматически объединять массивы символов и назначить их в строку ручки. Я думаю, что нужно создавать новый объект System::String так:

System::String^ loc_inst = gcnew System::String(appDataPath); 
loc_inst.Append("\\inst\\info.xml"); 

Или вы могли бы использовать StringBuilder, но если вы хотите сделать новый объект String Я думаю, вы должны использовать gcnew и конструктор.

Имейте в виду, что appDataPath не является String, а массивом символов, который вы ранее выделили. Однако System::String позволяет передавать в массивах char один из его конструкторов.

+0

Ах, спасибо, код: StringBuilder^build_str = gcnew StringBuilder ("", MAX_PATH); \t \t \t для (INT I = 0; я Append (gcnew массив {appDataPath [I]}); } Система :: String^loc_inst = build_str-> ToString(); – Jers