用vc写了一个log文件,打开看时正常,但一修改保存,所有的回车都丢失了。为什么?
CStdioFile file;   
file.Open(Logname,CFile::modeCreate | CFile::modeWrite|CFile::modeNoTruncate); 
file.SeekToEnd();
file.WriteString(Message);   
file.WriteString("\r\n");   
file.Close();  
return true;

解决方案 »

  1.   

    file.SeekToEnd();
    file.WriteString(Message);   
    file.WriteString("\r\n");   
    =============================
    file.SeekToEnd();
    file.WriteString(Message);   
    file.SeekToEnd();
    file.WriteString("\r\n");   
    试试
      

  2.   

    CStdioFile::WriteString( LPCTSTR lpsz );(不支持CString直接写入)将一个缓冲区中的数据写入与CStdioFile 对象关联的文件中。结束的空字符(“\0”)不被写入该文件。lpsz 中的所有换行符都被以一个硬回车换行符对写入该文件,即“\n”被转化成“\r\n”写入到文件里。file.WriteString("\n"); 在看看你打开 txt的工具是否做了什么设置,去除了\r  
      

  3.   

    我用的就是CString
    BOOL CLog::WriteLog(CString Message)
    {
    CStdioFile file;   
    file.Open(Logname,CFile::modeCreate | CFile::modeWrite|CFile::modeNoTruncate); 
    file.SeekToEnd();
    file.WriteString(Message);   
    file.WriteString("\r\n");   
    file.Close();  
    return true;}
      

  4.   

    尽管是text文件如果想保留“回车”必须在open时加:CFile::typeBinary否则CR会被删除。
      

  5.   


    这位小哥说的对~不信就试吧,等论坛的间隙都做出来了~
    不信你按照你的方式读一个图片试试~,读到默认为0的时候就自己断了,从下行接着读,丢不少数据~fread fget还是不大一样的查查msdn吧~
      

  6.   

    再说明白点吧。
    linux的text文件都没有回车(0x0D),只有换行(0x0A)。
    而windows(DOS)text有回车(0x0D),和换行(0x0A)。
    如果打开模式是text,读linux文件时会加入时回车(0x0D),成了回车换行。
    而写入linux文件时会删除回车(0x0D),只剩换行(0x0A)。
    、、
    如果打开模式是bianry则不管读和写,回车(0x0D)会保留。