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

MFC CArchive 讀取文件末尾異常處理最佳實踐

     編輯:程式設計綜合問答

問題場景

使用 CArchive 讀取文件時,無法直接判斷 EOF,嘗試讀取超出末尾會拋出異常。常見代碼:

while (1) {
    ca >> sno;  // 讀到末尾拋出 CArchiveException
}

異常捕獲寫法

寫法一:捕獲所有異常(不推薦生產環境)

try {
    while (true) {
        ca >> sno;
        // 處理數據
    }
} catch (...) {
    // 到達文件末尾或其他異常
}

寫法二:精確捕獲 CArchiveException(推薦)

try {
    while (true) {
        ca >> sno;
        // 處理數據
    }
} catch (CArchiveException* e) {
    if (e->m_cause == CArchiveException::endOfFile) {
        // 正常讀取完畢
    } else {
        // 其他存檔異常:generic, badSchema, readOnly 等
        AfxMessageBox(_T("讀取文件錯誤"));
    }
    e->Delete();  // 必須手動刪除 MFC 異常對象
}

更優雅的替代方案

利用 CFile 配合 CArchive 的 GetFile() 獲取文件長度,預先判斷讀取位置:

CFile file(_T("data.dat"), CFile::modeRead);
CArchive ar(&file, CArchive::load);
ULONGLONG fileLen = file.GetLength();

while (file.GetPosition() < fileLen) {
    ar >> sno;
    // 處理數據
}

注意事項

  • CArchiveException 是指針類型,捕獲後必須 Delete()。
  • 異常捕獲會影響性能,大文件建議用位置判斷替代。
  • 寫入時配合 Flush() 確保數據落盤。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved