程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> carchive-MFC中讀寫文件問題 CArchive寫入文件的是亂碼

carchive-MFC中讀寫文件問題 CArchive寫入文件的是亂碼

編輯:編程綜合問答
MFC中讀寫文件問題 CArchive寫入文件的是亂碼

代碼如下,寫入文件之後再打開txt發現除了前面的學號,後面的都是亂碼。各行寫有注釋,請各位幫忙看一下,我覺得可能是寬字節的問題,但是本人是小白不知道該怎麼弄,謝謝各位。

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;
    }                                                               //學號必須要6位數

    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);          //兩個CArchive,一個讀一個寫

    CString strSno;
    CString strtemp;

    cf.SeekToBegin();

    while (cf.GetPosition() != cf.GetLength()){
        cal >> strSno;
        MessageBox(strSno);
        if (m_aSno == strSno){
            MessageBox(_T("該學號已存在,請重新輸入。"), _T("錯誤"));
            m_aSno = "";
            UpdateData(FALSE);
            return;
        }                                                               //如果有重復就不寫入
        cal.ReadString(strtemp);                       //讀完這一行剩下的數據以便進入下一行
    }                                                                //不斷執行直到文件尾


    cf.SeekToEnd();                                    //符合條件了則開始寫入,首先移動到末尾
    cas << m_aSno  << m_aName  << m_aMajor  << m_aComp << m_aMath << m_aEng << m_aGym << "\n";        //利用CArchive寫入
    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();


}

寫入到文件之後,打開txt結果是這樣的。
圖片說明

不知道這是什麼原因?我的vs2013默認的就是unicode。
另外我想知道如果向我上面那樣用CArchive往文件裡寫數據,怎樣才能寫入一個換行符呢?還有就是CArchive有沒有什麼辦法能夠做到像ostream的<<一樣能夠使用setw來調整格式呢?小弟剛學,問題有點多,謝謝各位~

最佳回答:


用二進制方式寫入文件,同時讀取的時候也用二進制讀取。

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