WriteFile写文件乱码问题

1. 写入的时候采用多字节char类型

HANDLE hFile;

DWORD nBytes;

hFile=CreateFile(_T"test.txt"),GENERIC_WRITE,FILE_SHARE_WRITE,NULL,CREATE_ALWAYS,0,NULL);

char msg[]="以沃尔沃饿哦家人哦额无人机";

if(hFile!=INVALID_HANDLE_VALUE)

{ WriteFile(hFile,msg, sizeof(msg) ,&nBytes,NULL); CloseHandle(hFile); }

2. 直接写入unicode的头字节

HANDLE hFile;

DWORD nBytes;

hFile=CreateFile(_T("test.out"),GENERIC_WRITE,FILE_SHARE_WRITE,NULL,CREATE_ALWAYS,0,NULL);

WCHAR msg[]=L"伦敦警方立刻加拉斯减肥iejo房间里多少级啊法律解决我";

if(hFile!=INVALID_HANDLE_VALUE) { DWORD a=0xFEFF;

WriteFile(hFile,&a,sizeof(a),&nBytes,NULL);

WriteFile(hFile,msg, lstrlen(msg) * sizeof(TCHAR),&nBytes,NULL);//第三个参数可以直接sizeof(msg) CloseHandle(hFile); }

3. 使用WideCharToMultiByte转换成多字节

宽窄字符转化
      int a = WideCharToMultiByte(CP_ACP, NULL, szText, -1, LPSTR(szTextAnsi), MAX_PATH, NULL, FALSE);//Unicode转换为ANSI,a的值包括了字符串最后的0
      if (WriteFile(hFile, szTextAnsi,a-1, &dwBytesWrite, NULL))//写入的时候最后的0不用写入所以要用a-1
      {
       MessageBox(hwnd,TEXT("写入成功"),TEXT("成功"),0);
      }
      else
      {
       MessageBox(hwnd,TEXT("写入失败"),TEXT("出错"),0);
      }

4. 使用wcstombs转换成多字节,需要引用wchar.h和locale.h

HANDLE hFile;

DWORD nBytes;

hFile=CreateFile(_T("test.out"),GENERIC_WRITE,FILE_SHARE_WRITE,NULL,CREATE_ALWAYS,0,NULL);

WCHAR msg[]=L"法律空间啊快点放假的就佛iejofijeiawjfajfejifio";

 if(hFile!=INVALID_HANDLE_VALUE)

 {

char buf[sizeof(msg)];

setlocale(LC_ALL, ".936");

wcstombs(buf, msg, sizeof(msg));

WriteFile(hFile,buf, sizeof(buf),&nBytes,NULL);

 CloseHandle(hFile);

 }

//*********以下为读入***********************//

hFile=CreateFile(_T("test.txt"),GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_ALWAYS,0,NULL);

if(hFile!=INVALID_HANDLE_VALUE){ WCHAR line[256]={0};

BOOL bResult;

bResult=ReadFile(hFile,line,sizeof(line),&nBytes,NULL);

if(nBytes!=0)

 {

 printf("%s\r\n",line);

 }

CloseHandle(hFile);

}

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值