程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> 文件讀寫-CArchive如何才能替換txt文件中的某一行?

文件讀寫-CArchive如何才能替換txt文件中的某一行?

編輯:編程綜合問答
CArchive如何才能替換txt文件中的某一行?

我用CArchive進行文件的讀寫,現在想修改其中的某一行,於是我聲明了兩個CArchive
對象,基於同一個CFile對象,一個讀,一個寫。先從文件中讀入,然後讀入的數據是否
滿足條件,若滿足,則緊接著用另一個CArchive對象寫入新數據,若不滿足,則把原來
的數據再寫回去。但是好像有問題,兩個CArchive對象聲明的時候,如果是store的在
前面,則可以添加,但是會直接添加到文件結尾,如果聲明時load的那個在前面,則添
加了文件沒有變化。請問為什麼會這樣呢?是因為緩沖區嗎?另外請問各位大神可以怎樣
解決這個問題呢?謝謝各位~

 void Modify::OnClickedIdbModify()
{
    // TODO: Add your control notification handler code here
    if (!m_mComp || !m_mEng || !m_mMath || !m_mGym || m_mName == "" || m_mSno == "" || m_mMajor == ""){
        MessageBox(_T("請先進行搜索再嘗試更改!"), _T("錯誤"));
        return;
    }

    MessageBox(_T("您正嘗試更改一名學生的信息!\r\n確認更改請單擊'確定',否則請單擊'取消'"),
        _T("警告"), MB_ICONEXCLAMATION | MB_OKCANCEL);

    UpdateData();

    CFile cf;
    if (!cf.Open(_T("D:\\SIMS.txt"),
        CFile::modeCreate | CFile::modeNoTruncate | CFile::modeReadWrite | CFile::typeBinary)){
#if def_DEBUG
        afxDump << "unable to open file" << "\n";
        exit(1);
#endif 
    }

    CArchive cas(&cf, CArchive::store);
    CArchive cal(&cf, CArchive::load);            //能否成功寫入似乎與聲明的順序有關

    CString temp;
    CString sno;

    int flag = 1;
    while (flag){
        cal >> sno;
        cal.ReadString(temp);                    //先把這一行分兩部分讀入
        if (m_mSno == sno){                     //再判斷讀入的sno是否滿足條件
            UpdateData();
            cas << sno << m_mName << m_mMajor << m_mComp << m_mMath << m_mEng << m_mGym;  
            temp.Format(_T("\r\n"));
            cas << temp;
            flag = 0;                //若滿足,則把對話框中新獲得的數據在這一行覆蓋原數據
        }
        else{                        //若不滿足,則把剛剛讀入的原數據重新寫回去
            cas << sno;
            cas.WriteString(temp);
        }

    }                                 //繼續下一行的讀入與判斷

    cas.Close();
    cal.Close();
    cf.Close();
}

各位大神幫幫忙,小弟初學MFC,想做一個修改文件中某行數據的功能。謝謝!

最佳回答:


文本文件替換一行沒有什麼高效的辦法,因為不是二進制文件。如果文件大小不是很大(100萬行以內),建議一次性讀取到內存,然後再輸出。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved