代码如下:
CStdioFile csf;//写文件
CString m_disp;
if(csf.Open  ("E://test//log.txt",/*CFile::modeCreate|CFile::modeNoTruncate|*/CFile::modeReadWrite|CFile::typeText)==NULL)
{
AfxMessageBox("建立文件失败");
return;
} csf.SeekToBegin();
csf.Read(m_disp.GetBufferSetLength(csf.GetLength()),csf.GetLength());
csf.SeekToBegin();
csf.WriteString("nnnaaa!\n");
csf.WriteString(m_disp);
csf.Close();

解决方案 »

  1.   

    csf.SeekToBegin();
    int len = csf.GetLength();
    char *buf = m_disp.GetBufferSetLength(len+1);
    csf.Read(buf,len);
    buf[len]=NULL;//记得加上 NULL 结尾!!!
    ...
      

  2.   

    int l_len = csf.Read(buf,len);
    buf[l_len]=NULL;//记得加上 NULL 结尾!!!
    ...
      

  3.   

    你不就是要把CString对象里面的内容写到文件里面去吗?可以这样啊~~
    CString msg;
    msg="xxxxxxxxxxxxxxxxxxxxxxxx";
    CFile file("c:\\test.txt",CFile::modeCreate|CFile::modeReadWrite);
    file.Write(msg,strlen(msg));
      

  4.   

    我是想把字符串加在文件的开头啊。
    我在末尾加了NULL了,还是不行。
      

  5.   

    那个是回车啊,在我用DEBUG跟的时候执行到csf.Read(m_disp.GetBufferSetLength(csf.GetLength()),csf.GetLength());这句的时候字符串的末尾就有乱码了。
      

  6.   

    刚测试了,主要是CStdioFile的问题。
    csf.Read(m_disp.GetBufferSetLength(csf.GetLength()),csf.GetLength());
    这里会忽略掉 0x0D的(即回车)。
    如果你是设为 CFile csf;
    if(csf.Open  ("E://test//log.txt",/*CFile::modeCreate|CFile::modeNoTruncate|*/CFile::modeReadWrite)==NULL) //这里不要CFile::typeText
    比较就知道了。
    所以建议,如用CStdioFile的,就只用它的ReadString好了。
    或者全改为CFile较稳健,一定可以读取全部的。