代碼如下,寫入文件之後再打開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來調整格式呢?小弟剛學,問題有點多,謝謝各位~
用二進制方式寫入文件,同時讀取的時候也用二進制讀取。