我想只改写文本的第一行数据
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();
}
但是我覆盖了第一行后,后面就乱码了。。
目测是写入长度出问题了。。应该是覆盖到了第二行的文字。
但是这里长度不对吗?为什么会超出第一行的文字长度?
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);
}
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。