被CStdioFile的ReadString不认UNICODE搞得很痛苦,参照了N多例子都弄不出来,前面的帖子也盼望有个答案,过两天结账。求实现过程,文件是UNICODE的,总之逐行读出来没乱码就行,WCHAR or char[]还是CString都没关系(CString好一些),我自个儿再去转换MFC还是STL或纯C都可以。
叩谢!!!!!!!!

解决方案 »

  1.   

    自己用CreateFile打开文件,ReadFile来读啊,为啥一定要用CStdioFile来读呢
    如果已经确认目标文件是unicode编码,每次读偶数字节就不会乱码
      

  2.   

    不是告诉你了么,Unicode文件是无法用CStdioFile读的,这样也间接说明无法逐行读,因为unicode文件不能以typeText方式打开,既然连打开都不行,何来逐行?这种文件似乎只能用二进制方式打开,全部读进来,然后自己再分行
      

  3.   


    谢谢,我另外一边也试试二进制???这样的内容显示null... CString tempStr;
    ifstream in("\\123.txt");
    string s; while(getline(in,s))
    {
    tempStr.Format(_T("%s"),s);
    AfxMessageBox(tempStr);
    }再底层的方法就不知道从何入手了。
      

  4.   

    CStdioFile file(L"c:\\u.txt", CFile::modeRead | CFile::typeBinary);
    CString str;
    while (file.ReadString(str))
    {
    AfxMessageBox(str);
    }c:\u.txt - unicode文件 内容是
    cvnladsvndkvj
    阿訇在cascvsdvsd
    cnakjcn55!!!!Zslkcfadsnsdv, dfm;lsdvm;用记事本输入上述内容另存为unicode文本 运行了一下 没有看到你说的乱码
      

  5.   

    看文章不要只看几个字,你只看到“二进制”,没有看到“不能按行读”
    你应该用read之类得函数把整个文件读进来,然后找\r\n
      

  6.   

    假定你的Unicode文件是UTF-16编码,且没有BOM,只以换行符为行结束标记:
    int main()
    {
    FILE *hFile=0;
    wchar_t buff[1000];
    int i=0;
    hFile=fopen("c:\\abc.txt","rb");
    while(true)
    {
    buff[i]=fgetwc(hFile);
    if (buff[i]==L'\n'||feof(hFile))
    {
    buff[i]=0; //buf为一行文本,处理
    i=0; }
    if(feof(hFile)) break; i++; }
    fclose(hFile);

        return 0;
      

  7.   

    用CFile就可以了,用WCHAR 数组Read,关键是字节数要算对
    至于换行的话,根据“\r\n”即可判断了
    明天给你段代码吧
      

  8.   

    扩展CStdioFile类,支持Unicode.
      

  9.   

    CFile file; TCHAR* pFileName = _T("TEST.txt");
    if(!file.Open(pFileName, CFile::modeCreate | CFile::modeNoTruncate | CFile::modeRead| CFile::typeBinary | CFile::shareDenyNone))
    {
    MessageBox(_T("打开TEST.txt文件失败!"));
    }
    DWORD len=file.GetLength();
    TCHAR *pContent= new TCHAR[len/2+1];//UNICODE文件必须用TCHAR来读
    memset(pContent,0,len);
    // (第一个字符0xfeff,实际有用的为后面字符)
    file.Seek(0,CFile::begin);//
    file.Read(pContent,len);   
    file.Close();