Более легкий подход (чем при использовании сырого Win32 API MultiByteToWideChar) будет использовать ATL conversion helpers, как CA2CW. Вы можете указать CP_UTF8 как кодовой страницы (второй параметр в конструкторе), для преобразования из Unicode UTF-8 в Unicode UTF-16:
CreateDirectoryW(
CA2W(utf8Name, CP_UTF8) // convert from UTF-8 to UTF-16
... // other stuff
);
Обратите внимание, что в Unicode строит (которые должны быть те, по умолчанию они дней), CreateDirectory просто расширяется до CreateDirectoryW, так что я бы просто падение окончание "W" и использовать (ИМХО, более читаемый) CreateDirectory:
CreateDirectory(
CA2W(utf8Name, CP_UTF8) // convert from UTF-8 to UTF-16
... // other stuff
);
Yikes. Зачем кому-то это нужно? Я думаю, что мы прошли мимо Windows ME (которая была последней версией Windows, когда-либо нуждавшейся в ANSI API). Они должны умереть уже, особенно для недавно разработанных приложений. – Joey
Откуда вы получаете строки UTF-8? Гораздо проще конвертировать ваше приложение, чтобы полностью работать с строками UTF-16, так как требуются так называемые функции Windows API с широкими версиями. И, как говорит Джо, * всегда * называйте широкие версии (с суффиксом 'W'), а не версиями ANSI. Они устарели десятилетиями. –
@Joey: Поскольку огромные библиотеки C (++) (включая стандартную библиотеку!) Предпочитают работать с строками, основанными на символах, а не с строками 'wchar_t'. Если Windows полностью поддерживает UTF-8, вы можете просто использовать UTF-8 во всей своей программе, а не постоянно конвертировать между UTF-8 и UTF-16. – dan04