首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

MFC 文本文件覆蓋第一行導致後續亂碼問題

     編輯:程式設計疑難解答

錯誤代碼分析

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

要點:讀取全部內容 → 內存中替換 → 截斷文件重寫,避免原地修改帶來的長度不匹配。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved