STU stu;
CStdioFile file;
CString strLine;
file.Open(_T("学生信息.txt"),CStdioFile::modeWrite|CStdioFile::modeCreate
|CStdioFile::modeNoTruncate|CStdioFile::modeRead);


while (file.ReadString(strLine))
{
strLine.GetBufferSetLength(e_Id.GetLength());
if(strLine==e_Id)
MessageBox(_T("学号已存在!"));break;         //验证学号是否已存在
}

        file.SeekToEnd(); UpdateData(TRUE); if(e_Id==""||e_Name==""||e_Gender==""||e_College==""||e_Class==""||e_Major=="")
MessageBox(_T("请填写完整信息!"));
else
{
stu.Id=e_Id;
stu.Name=e_Name;
stu.Gender=e_Gender;
stu.College=e_College;
stu.Major=e_Major;
stu.Class=e_Class;               //获取编辑框里内容 if(file.GetLength()==0)
{
unsigned short int  nUFHead  = 0xfeff;
file.Write(&nUFHead, sizeof(short int));
}
stu.Id.Append(L"$");
stu.Name.Append(L"$");
stu.Gender.Append(L"$");
stu.College.Append(L"$");
stu.Major.Append(L"$");
stu.Class.Append(L"$\r\n");        char* old_locale = _strdup( setlocale(LC_CTYPE,NULL) );
        setlocale( LC_CTYPE, "chs" ); file.WriteString(stu.Id);
file.WriteString(stu.Name);
file.WriteString(stu.Gender);
file.WriteString(stu.College);
file.WriteString(stu.Major);
file.WriteString(stu.Class);           //写入文件

setlocale( LC_CTYPE, old_locale );
        free( old_locale );

file.Flush();
file.Close();
MessageBox(_T("已添加成功!"));
}
}
STU 是结构体 定义没问题。   现在是写入文件的中文是乱码,读取估计也不对,请大神指点。。

解决方案 »

  1.   

    写入文件的中文是UNICODE的,开头3,4个字节为: 
    /*
    EF BB BF    UTF-8  
    FE FF     UTF-16/UCS-2, little endian  
    FF FE     UTF-16/UCS-2, big endian  
    FF FE 00 00  UTF-32/UCS-4, little endian.  
    00 00 FE FF  UTF-32/UCS-4, big-endian.
    */
    然后用“记事本打开”
      

  2.   

    你的工程是Unicode吧
    改成多字节再试试
      

  3.   

    try
    {
     CFile file(_T("F:\\11.txt"), CFile::modeCreate | CFile::modeWrite);
     CString strText(_T("Hello,你好,世界World!);
     file.Write(strText, strText.GetLength() * sizeof(TCHAR);
     file.Close();
    }
    catch(CFileException* e)
    {
     e->ReportError();
     e->Delete();
    }