Un enfoque más sencillo (que el uso de la API de Win32 prima MultiByteToWideChar) sería utilizar ATL conversion helpers, como CA2CW. Puede especificar CP_UTF8 como página de códigos (segundo parámetro en el constructor), convertir de Unicode UTF-8 a Unicode UTF-16:
CreateDirectoryW(
CA2W(utf8Name, CP_UTF8) // convert from UTF-8 to UTF-16
... // other stuff
);
Tenga en cuenta que en Unicode se basa (que debería ser la falta de pago éstas día), CreateDirectory simplemente se expande a CreateDirectoryW, por lo que me acaba de caer la terminación "W" y usar el (en mi humilde opinión, más legible) CreateDirectory:
CreateDirectory(
CA2W(utf8Name, CP_UTF8) // convert from UTF-8 to UTF-16
... // other stuff
);
Huy. ¿Por qué alguien querría eso? Creo que ya hemos superado Windows ME (que fue la última versión de Windows que necesitó las API de ANSI). Deben desaparecer ya, especialmente para aplicaciones recientemente desarrolladas. – Joey
¿De dónde obtiene las cadenas UTF-8? Es mucho más fácil convertir la aplicación para que funcione completamente con cadenas UTF-16, como requieren las denominadas funciones de API de Windows de amplia versión. Y como dice Joey, * siempre * llame a las versiones anchas (con el sufijo 'W'), no a las versiones ANSI. Esos han sido obsoletos durante décadas. –
@Joey: Porque una gran cantidad de bibliotecas C (++) (¡incluida la biblioteca estándar!) Prefieren trabajar con cadenas basadas en 'char' en lugar de cadenas basadas en' wchar_t'. Si Windows es totalmente compatible con UTF-8, entonces puede usar UTF-8 en su programa en lugar de tener que realizar conversiones entre UTF-8 y UTF-16 todo el tiempo. – dan04