#ifndef UNICODE
#define UNICODE
#endif
#include <Windows.h>
#include <cstdio>
#include <fstream>
using namespace std;
int main()
{
FILE* resFile;
char multiByteStr[256];
ifstream oFile;
FILE* exampleFile;
TCHAR buffer[256];
resFile = _wfopen(L"foo",L"w, ccs=UTF-8");
system("chcp 65001");
fwprintf(resFile,L"%s",L"C:\\istniejacyfolder\\zażółć gęśłą jaźń ☺☻♥♦• ć.txt");
fclose(resFile);
oFile.open(L"foo");
oFile.getline(multiByteStr,256,'\n');
oFile.close();
MultiByteToWideChar(CP_UTF8,0,multiByteStr,-1,buffer,256);
wprintf(L"%ls",buffer);
exampleFile = _wfopen(buffer,L"w, ccs=UTF-16LE"); //*
fwprintf(exampleFile,L"%ls",buffer);
fclose(exampleFile);
system("pause");
return 0;
}
W tym wypadku _wfopen zwraca NULL i działanie programu nic nie wnosi.
Przy następnym breakpoincie wyskakuje messageBox "Debug assertion failed".
Co śmieszne, gdy przepiszę ręcznie bufor do funkcji otwierającej plik, tzn.
exampleFile = _wfopen(L"C:\\istniejacy folder\\zażółć gęśłą jaźń ☺☻♥♦• ć.txt",L"w, ccs=UTF-16LE");
plik tworzy się w prawidłowym miejscu, a wszystkie unikodowe znaki są zachowane. Dlaczego tak się dzieje?