Как создать каталог без использования широких строк в C ++? - PullRequest
0 голосов
/ 04 июня 2018

Я пытаюсь создать каталог, чтобы в него можно было поместить файл.

Мой код:

string Set;
...
CreateDirectory("Game/Sets/" + Set, NULL); // I'm trying to have something like this. CreateDirectory needs wide strings, but Set is narrow.

Переменная Set представляет собой узкую строку.

Я думаю, что мне может понадобиться что-то кроме CreateDirectory, но я не знаю, что.

1 Ответ

0 голосов
/ 04 июня 2018

Вы должны использовать функцию-член string::c_str(), чтобы получить соответствующее const char* (AKA LPCSTR):

string Set;
...
CreateDirectory(("Game/Sets/" + Set).c_str(), NULL);

Но, вероятно, лучше использовать временную переменную:

string Set;
...
string fullDir = "Game/Sets/" + Set;
CreateDirectory(fullDir.c_str(), NULL);

Может случиться так, что вы компилируете программу UNICODE.Если это так, вы получите ошибку, потому что const char* не конвертируется в const wchar_t*.Решение состоит в том, чтобы вызвать ANSI-версию функции:

CreateDirectoryA(fullDir.c_str(), NULL);

Если вы предпочитаете, вы можете использовать функцию ANSI, даже если ошибок нет, просто для большей согласованности.

Помнитечто CreateDirectory на самом деле является макросом, который расширяется до CreateDirectoryW или CreateDirectoryA в зависимости от конфигурации проекта.Вы можете использовать любое из этих трех имен по своему усмотрению.

...