程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> carchive-CArchive的文件指針位置和CFile的文件指針位置是一樣的麼?

carchive-CArchive的文件指針位置和CFile的文件指針位置是一樣的麼?

編輯:編程綜合問答
CArchive的文件指針位置和CFile的文件指針位置是一樣的麼?
 void Add::OnClickedIdbAdd()
{
    // TODO: Add your control notification handler code here
    UpdateData();
    if (!m_aComp || !m_aEng || !m_aMath || !m_aGym || m_aName=="" || m_aSno=="" || m_aMajor=="" ){
        MessageBox(_T("請完善信息後再確認輸入!"), _T("錯誤"));
        return;
    }

    if (m_aSno.GetLength() != 6){
        MessageBox(_T("學號必須為6位數,請重新輸入。"), _T("錯誤"));
        m_aSno = "";
        UpdateData(FALSE);
        return;
    }

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


    CString strSno;
    CString strtemp;


    while (cf.GetPosition() != cf.GetLength()){

        cal >> strSno;
        if (cf.GetPosition() == cf.GetLength()){
            strtemp.Format(_T("等於:pos:%lu,len:%lu"), cf.GetPosition(), cf.GetLength());
            MessageBox(strtemp);
        }
        MessageBox(strSno);
        if (m_aSno == strSno){
            MessageBox(_T("該學號已存在,請重新輸入。"), _T("錯誤"));
            m_aSno = "";
            UpdateData(FALSE);
            return;
        }
    }


    cf.SeekToEnd(); 

    cas << m_aSno << m_aName << m_aMajor << m_aComp
        << m_aMath << m_aEng << m_aGym ;
  strtemp.Format(_T("\r\n"));
    cas << strtemp;                                   //想利用這種方法來輸入回車
    cas.Flush();    

    cf.SeekToBegin();
    cal >> m_aSno;
    cal >> m_aName;
    MessageBox(m_aSno);
    MessageBox(m_aName);              //到文件頭再重新把剛剛輸入的讀出來驗證一下

    m_aSno = "";
    m_aName = "";
    m_aMajor = "";
    m_aComp = 0;
    m_aEng = 0;
    m_aGym = 0;
    m_aMath = 0;
    UpdateData(FALSE);

    MessageBox(_T("添加成功"), _T("成功"));

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


}

代碼就是這樣,現在的問題就是,那個getposition()!=getlength()的循環那裡,我是想用這句來判斷是否到了文件結尾的。但是不管之前寫入了多少數據,這裡總是只執行一次就結束了。我這裡用的是CFile的getposition和getlength,它和CArchive對象操作的文件指針是一個指針麼?還是這樣並不能獲得CArchive在文件內讀寫時的指針呢?如果是一個指針,為什麼只能循環一次呢?
還有就是hi,上面我在最後又寫入了\r\n,因為我看到msdn裡面寫CArchive的readstring遇到回車就停止了,這樣我就能實現先讀一行,循環第二次再讀第二行,然後繼續下去了。但是現在每次都是在最後的時候會出問題,就是第一次讀入和顯示到視類窗口都是沒問題的,第二次讀入不會彈出錯誤,但是在視類窗口顯示就不對了,第三次讀入到最後CArchive對象close的時候,就會彈出下面這個。求各位大神幫忙啊啊啊啊,這幾天都在弄這個破問題一直找不到解決方法,感覺要瘋了啊啊啊啊。跪謝啊啊啊啊
圖片說明
然後這是視類窗口顯示的前三次的內容QAQ
圖片說明
有沒有哪位大神願意留下qq交流一下啊。。

最佳回答:


直接對CFile的Seek操作,可以反映到關聯的CArchive(而且有兩個)上面麼?

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