WriteFile写成的文件乱码

想把一个variant类型的变量写入文件中,如果按以下代码运行,可以写到文件里但是是乱码,奇怪的是可以把写入的那个变量的内容读出来,读的还是正确的。

VARIANT str;

VariantInit(&str);

str.vt=VT_BSTR;

str.bstrVal=SysAllocString(_T(iii));

LPWSTR szPath=_T(F:\\write.txt);

HANDLE hFile=CreateFile(szPath,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);

DWORD dwBytesWritten=0;

WriteFile(hFile,&str,sizeof(VARIANT),&dwBytesWritten,NULL);

CloseHandle(hFile);

//读取

hFile=CreateFile(szPath,GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);

DWORD dwBytesRead=0;

VARIANT temp;

VariantInit(&temp);

ReadFile(hFile,&temp,sizeof(VARIANT),&dwBytesRead,NULL);

CloseHandle(hFile);

 

直接运行以上代码,先写一边再打开,查看temp的值发现读取的就是iii,但是打开test.txt文件查看,里面是乱码。

如果直接readfile,打开上一次程序运行生成的test.txt文件,查看temp的值显示empty或者是“”或者是<读取字符串字符时出错>,每次运行结果都不一样,但是都不能读出iii。

因为写的并不是文本数据,你用文本工具打开,当然就是乱码。如果你要想打开文件也能看,需要把变量先转换成字符串