ReadFile返回的数据为乱码问题

在处理文件读取时,使用Windows API CreateFile打开文件并用ReadFile读取内容,发现返回的数据出现乱码。解决方案是将读取到的BYTE数据通过MultiByteToWideChar转换为正确的宽字符字符串。
摘要由CSDN通过智能技术生成
  1. WCHAR filePath[256]  = {0};
  2. WCHAR *path     = _T("//My Documents//11.txt");
  3.     hd = CreateFile(path, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_ARCHIVE, NULL);
  4.     if(hd == INVALID_HANDLE_VALUE)
  5.     {
  6.         return GetLastError();
  7.     }
  8.     blError = ReadFile(hd, filePath, 256, &retCount, NULL);
  9.     if(0 == blError)
  10.     {
  11.         return GetLastError();
  12.     }

 

声明一个BYTE类型data。代替ReadFile中filePath。

 

  MultiByteToWideChar(CP_ACP, 0, (LPCSTR)data, -1, filePath, retCount);

转换data数据到filePath。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
ReadFile返回0的原因可能有多种可能性。根据提供的引用内容,可以看出在读取NTFS_MFT结构体时,ReadFile返回0的问题可能是由于对读取的目标不正确导致的。在之前的代码中,ReadFile是用来读取文件的,而这次要读取的是物理硬盘,需要进行512字节对齐。因此,需要将结构体修改为512字节,并将ReadFile的参数修改为每次读取512个字节。这样才能成功读取。\[1\] 另外,根据引用\[2\]和\[3\]的内容,ReadFile函数还可以用于异步读取操作和从控制台输入缓冲区读取字符。但是这些内容与问题中提到的ReadFile返回0的情况可能没有直接关联。 综上所述,ReadFile返回0的问题可能是由于对读取目标的错误选择导致的,需要根据实际情况进行相应的修改。 #### 引用[.reference_title] - *1* [ReadFile读取硬盘返回值为0的解决办法](https://blog.csdn.net/weixin_34221775/article/details/91559185)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [ReadFile功能](https://blog.csdn.net/qq_41476542/article/details/103690608)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值