void EditView::WriteInTitle(CString strName, CString lpsz) {
CFile WriteFile;
WriteFile.Open(strName, CFile::modeWrite | CFile::modeRead | CFile::typeBinary);
// 移除 \r 後寫入 lpsz + "\r\n"
WriteFile.Write(s, lpsz.GetLength()*sizeof(CHAR));
WriteFile.Close();
}
CFile::modeWrite 打開文件後,寫入位置從文件開頭開始。若新內容比原第一行短,剩餘舊數據保留導致亂碼;若更長,會覆蓋第二行開頭。文本文件無法原地修改某一行,因行長度不固定。
CString ReplaceFirstLine(CString content, CString newFirst) {
int pos = content.Find('\n');
if (pos == -1) return newFirst + _T("\r\n");
return newFirst + _T("\r\n") + content.Mid(pos + 1);
}
// 使用示例
CString all;
file.ReadString(all); // 讀取全文
all = ReplaceFirstLine(all, newTitle);
file.Close();
// 重新以 modeCreate|modeWrite 打開並寫入 all
要點:讀取全部內容 → 內存中替換 → 截斷文件重寫,避免原地修改帶來的長度不匹配。