乱码问题,十分郁闷,如解决,必有重谢

snowerhuayun 2005-06-17 03:06:37
HANDLE hFile;
LPSTR szBuf;
DWORD iLen, cBytes;
hFile = CreateFile(_T("sample.txt"), GENERIC_READ, 0, NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
iLen = GetFileSize(hFile, NULL);
szBuf = (char *)malloc(iLen);
SetFilePointer(hFile, 0, NULL, FILE_BEGIN);
ReadFile(hFile, szBuf, iLen, &cBytes, NULL);

SetDlgItemText(IDC_EDIT1,(LPCTSTR)szBuf);
free(szBuf);
CloseHandle(hFile);
我把从文件里读出来的数据,付到文本框后,乱码,得将szBuf怎么转换,才能不乱码啊
...全文
146 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
xqk 2005-06-17
  • 打赏
  • 举报
回复
楼上,CFile::ReadHuge 是干嘛用的啊?
boreboluomi 2005-06-17
  • 打赏
  • 举报
回复
是不是sample.txt里面存的就是乱码? 娃哈哈
boreboluomi 2005-06-17
  • 打赏
  • 举报
回复
如果会使用 CFile::ReadHuge 函数,先拿他试试
xqk 2005-06-17
  • 打赏
  • 举报
回复
现在的问题明显是字符串缓冲区读取数据的 溢出问题

HANDLE hFile;
LPSTR szBuf;
DWORD iLen, cBytes;
hFile = CreateFile(_T("sample.txt"), GENERIC_READ, 0, NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
iLen = GetFileSize(hFile, NULL);
szBuf = (char *)malloc(iLen +1 ); //要多分配一个字符空间,标志结尾
SetFilePointer(hFile, 0, NULL, FILE_BEGIN);
ReadFile(hFile, szBuf, iLen, &cBytes, NULL);
szBuf[iLen] = '\0'; //标志文件这里为结尾

SetDlgItemText(IDC_EDIT1,(LPCTSTR)szBuf);
free(szBuf);
CloseHandle(hFile);
loki2k 2005-06-17
  • 打赏
  • 举报
回复
老兄,我把你的代码拷下来,测试了一下,没有任何问题啊
(vs2003+WindowsXP)
Zhymax 2005-06-17
  • 打赏
  • 举报
回复
iLen = GetFileSize(hFile, NULL);
szBuf = (char *)malloc(iLen + 1); // 结束符
ReadFile(hFile, szBuf, iLen, &cBytes, NULL);
szBuf[cBytes]='\0';

Zhymax 2005-06-17
  • 打赏
  • 举报
回复
ReadFile(hFile, szBuf, iLen, &cBytes, NULL);
szBuf[cBytes]='\0';
snowerhuayun 2005-06-17
  • 打赏
  • 举报
回复
加上\0 结尾不好用,还是乱码啊
HANDLE hFile = CreateFile(_T("sample.txt"), GENERIC_WRITE, FILE_SHARE_READ,
NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
char szHeader[18];
sprintf(szHeader, "朱 3333 aaa\n\0", SECT_COLOR);
CFile mFile((int)hFile);
mFile.SeekToEnd();
mFile.Write(szHeader,sizeof(szHeader));
mFile.Flush();
mFile.Close();
CloseHandle(hFile);
蓄丰 2005-06-17
  • 打赏
  • 举报
回复
你从文件读取数据显示到文本框用些简单方式,出问题的机会要少得多:
比如 CFile,FILE* 一类的,试试。
尽量使用简单的代码。
xqk 2005-06-17
  • 打赏
  • 举报
回复
的确没有 \0 结尾哈哈
Beover1984 2005-06-17
  • 打赏
  • 举报
回复
szBuf = (char *)malloc(iLen);改成下面的试试
szBuf = (char *)malloc(iLen + 1);
memset( szBuf, 0, iLen + 1 );
.....
ReadFile(hFile, szBuf, iLen, &cBytes, NULL);
积木 2005-06-17
  • 打赏
  • 举报
回复
去查UNICODE.

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧