代码如下,写入文件之后再打开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();
}
不知道这是什么原因?我的vs2013默认的就是unicode。
另外我想知道如果向我上面那样用CArchive往文件里写数据,怎样才能写入一个换行符呢?还有就是CArchive有没有什么办法能够做到像ostream的<<一样能够使用setw来调整格式呢?小弟刚学,问题有点多,谢谢各位~