Объединить TCHAR с массивом символов?

-5

Я пытаюсь получить текущий каталог моего проекта. Через некоторое время я нашел функцию GetCurrentDirectory и, похоже, работает, но она работает только с wchar_T, что для меня делает вещи немного сложнее.

Вот мой код:

int main()
{
TCHAR pwd[MAX_PATH];
GetCurrentDirectory(MAX_PATH, pwd);
MessageBox(NULL, pwd, pwd, 0);
std::wcout << pwd + "\\filename.so" << '\n';
}

Как вы можете видеть, я пытаюсь добавить дополнительный текст к заполнителю для текущего рабочего каталога, однако он не работает. Что я могу сделать, чтобы успешно получить текущий каталог, а также добавить имя файла в этом каталоге? Если возможно, я также хотел бы иметь возможность использовать cout, я имею в виду, почему каталог даже хранится в виде широких символов? Все символы действительны как символы?

О, и я использую Visual Studio :)

спросил(а) 2021-01-19T21:55:48+03:00 9 месяцев, 1 неделя назад
1
Решение
65

std::wcout << pwd + "\\filename.so" << '\n';

При использовании оператора + вы не объединяете две строки. Вместо этого вы добавляете два указателя вместе. Вам нужно отказаться от TCHAR и char. Вместо этого используйте std::wstring.

Кроме того, используйте Wide (W) версии вызовов Win32.

int main()
{
wchar_t pwd[MAX_PATH];
std::wstring finalPwd;
GetCurrentDirectoryW(MAX_PATH, pwd);

finalPwd.assign(pwd);

MessageBoxW(NULL, finalPwd.c_str(), finalPwd.c_str(), 0);
std::wcout << finalPwd + L"\\filename.so" << '\n';
}

Недостатком этого подхода является то, что вам будет постоянно нужно преобразовывать wstring в wchar_t и наоборот на границах API. Но вы ничего не можете с этим поделать, кроме как написать некоторые функции обертки.

ответил(а) 2021-01-19T21:55:48+03:00 9 месяцев, 1 неделя назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема