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怎么转换,才能不乱码啊

解决方案 »

  1.   

    szBuf = (char *)malloc(iLen);改成下面的试试
    szBuf = (char *)malloc(iLen + 1);
    memset( szBuf, 0, iLen + 1 );
    .....
    ReadFile(hFile, szBuf, iLen, &cBytes, NULL);
      

  2.   

    你从文件读取数据显示到文本框用些简单方式,出问题的机会要少得多:
    比如 CFile,FILE* 一类的,试试。
    尽量使用简单的代码。
      

  3.   

    加上\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);
      

  4.   

    ReadFile(hFile, szBuf, iLen, &cBytes, NULL);
    szBuf[cBytes]='\0';
      

  5.   

    iLen = GetFileSize(hFile, NULL);
    szBuf = (char *)malloc(iLen + 1); // 结束符
    ReadFile(hFile, szBuf, iLen, &cBytes, NULL);
    szBuf[cBytes]='\0';
      

  6.   

    老兄,我把你的代码拷下来,测试了一下,没有任何问题啊
    (vs2003+WindowsXP)
      

  7.   

    现在的问题明显是字符串缓冲区读取数据的 溢出问题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);
      

  8.   

    如果会使用 CFile::ReadHuge 函数,先拿他试试
      

  9.   

    是不是sample.txt里面存的就是乱码?  娃哈哈
      

  10.   

    楼上,CFile::ReadHuge  是干嘛用的啊?