开发者社区> 问答> 正文

MFC 文本读写的问题

我想只改写文本的第一行数据
void EditView::WriteInTitle(CString strName, CString lpsz)
{

CFile WriteFile;
WriteFile.Open(strName, CFile::modeWrite | CFile::modeRead | CFile::typeBinary);

CString subStr = "\r";   //要被删除的子串
int index = lpsz.Find(subStr);
while (index!= -1)
{
   lpsz.Delete(index, subStr.GetAllocLength());
   index = lpsz.Find(subStr);
}

lpsz = lpsz + "\r\n";
LPCTSTR s = lpsz.GetBuffer(lpsz.GetLength());
WriteFile.Write(s, lpsz.GetLength()*sizeof(CHAR));
WriteFile.Close();

}
但是我覆盖了第一行后,后面就乱码了。。
目测是写入长度出问题了。。应该是覆盖到了第二行的文字。
但是这里长度不对吗?为什么会超出第一行的文字长度?

展开
收起
a123456678 2016-03-09 11:27:32 1726 0
1 条回答
写回答
取消 提交回答
  •  CString ReplaceFirstLine(CString s, CString newline)
    {
        if (s.IsEmpty()) return newline;
        LPCTSTR sc = (LPCTSTR)s;
        int i;
        int p = -1; 
        for (i = 0; i < strlen(sc) - 1; i++)
        {
            if (sc[i] == '\r' && sc[i + 1] == '\n')
            {
                p = i;
                break;
            }
        }
        if (p == -1) return newline;
        return CString(newline + CString(sc + i));
    }
    
    void CApp2Dlg::OnButton1() 
    {
        // TODO: Add your control notification handler code here
        CString str;
        CString t = "title";
        m_edit.GetWindowText(str);
        str = ReplaceFirstLine(str, t);
        m_edit.SetWindowText((LPCTSTR)str);
    }
    2019-07-17 18:55:39
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载