下面是我用CFile类读文件的代码,目的是读出自定义的文件后(注:在此,.wav文件并非真正的波形文件,其内容仅是一般的文本文件),将读出的内容输出到一个编辑控件窗口中:
CString string;
char pbuf[1000]; CFileDialog dlg(TRUE,_T("wav"),_T("*.wav"),OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,_T("波形文件(*.wav)"),NULL);
if(dlg.DoModal()==IDOK)
{
string.Format("%s",dlg.GetPathName());
CFile file;
if(!file.Open(string,CFile::modeRead|CFile::typeBinary,NULL))
{MessageBox("读源文件出错!","错误",MB_OK+MB_ICONSTOP);file.Close();return;}
     dwLengthOfFile=file.GetLength();
     file.Read( pbuf, dwLengthOfFile);
     CWnd *p_rich=this->dlg2.GetDlgItem(ID_RICHEDIT);
 p_rich->SetWindowText(pbuf);
 file.Close();
}
可是读出后,却在源文件的末尾老出现一些莫名奇妙的字符:"烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫"
比如:Wave Ramp;
  step=pi/102.4;
  repeat 4
  begin
    for t=0 to 2*pi do t
  end
wave_endend.烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫请问这是怎么回事??甘如何不出现这些字符呢?
还有,就是有的文件读出后就没有这些东西,而且那些文件一般都比较长。

解决方案 »

  1.   

    “烫”对应的十六进制的字符是 0xCCCC ,在DEBUG 版下没有初始化的内存段就是这个值,问题就出在你没有memset(pBuff,0,length);你可以这样改代码,你的现在的代码在文件较大的时候会越界,造成不可预知的错误。//char pbuf[1000]; 注释调这一句
    CFile file;
    if(!file.Open(string,CFile::modeRead|CFile::typeBinary,NULL))
    {MessageBox("读源文件出错!","错误",MB_OK+MB_ICONSTOP);file.Close();return;}
         dwLengthOfFile=file.GetLength();
         char *pbuf = new char[dwLengthOfFile];
         ZeroMemory(pbuf,dwLenghtOfFile);
         file.Read( pbuf, dwLengthOfFile);
    CWnd *p_rich=this->dlg2.GetDlgItem(ID_RICHEDIT);
     p_rich->SetWindowText(pbuf);
     file.Close();
             delete pbuf;