Serialize时,总不能正确的读写,是不是CArchive不支持文本读取方式(只支持二进制方式)。怎样设置。对于数据,如
1  1   100.0
1  2   200.0
2  1   300.0
寻求好的文件读写方式。最好有代码,谢谢。
[email protected]

解决方案 »

  1.   

    用CStdioFile读到的CString,以空格分割就得到数据了
      

  2.   

    读到一个数组中即可 我读过类似的文件 用了一个char三维数组 x表示列 y表示行 z表示由x,y确定位置的数组下标
    源代码给你贴上来 当时写了一些注释 应该不难理解 就是用CFile的对象做 一个一个字符读 根据空格和回车来判断
    int bufx=0,bufy=0,bufz=0,=1,last=;
    if (PathFileExists(rulefile)) {
    CFile mfile(rulefile,CFile::modeRead);
    TCHAR mtemp; //7列 假设500行 假设一个单元200个char
    DWORD flength=mfile.GetLength();
    while (flength!=mfile.GetPosition()) { //读一个字符
    mfile.Read(&mtemp,1);
                               //判断是否是回车
    if (mtemp!='\n') {
    //判断是否是空格
    last=; //取的上一个标记
    if (mtemp==' ') {
    =0; //space
    if (last!=) { //由char->space 读完了一个串
    mfbuff[bufx][bufy][bufz]='\0'; //添加一个结束符 bufz=0; //单元下标归零
    bufx++; //列加1
    }
    else { //一直在读空格
    }
    }
    else {
    =1; //char
    if (last==) { //一直在读字符串
    mfbuff[bufx][bufy][bufz]=mtemp;
    bufz++;
    }
    else { //由space->char 开始读一个字符串
    mfbuff[bufx][bufy][bufz]=mtemp;
    bufz++;
    }
    }
    }
    else {
    mfbuff[bufx][bufy][bufz-1]='\0';
    bufy++; //回车后 只加行 其他归零 bufx=0;
    bufz=0;
    }
    }
    mfile.Close();
    }当时读的是一个有7列n多行的文件 每一个单元都有多个字符
    缓冲区定死了TCHAR mfbuff[7][200][200];
    你按照你的文件改改就应该可以了
      

  3.   

    可以读文本呀先用CFile变量来初始化一个CArchive
    然后再调用CArchive::ReadString或WriteString
    CFile fFile(strFileName,CFile::modeRead);
    CArchive ar(&fFile,CArchive::load);
    ar.ReadString
      

  4.   

    其实不是的,是根据文件 的打开方式为来的,CFile::typeText 来表示是广西方式读写。
    可以在一个对话框 中测试以下代码:
    调用了下面的函数后,会到Serialize
    void CDlgAnyTest::OnFileSaveAs() 
    {
    UpdateData();//save data to memory var
    CFileDialog dlg(FALSE,_T("at"),_T("任意测试"),OFN_OVERWRITEPROMPT,_T("*.at|*.*||"));
    if(dlg.DoModal()==IDOK)
    {
    CFile theFile;
    ASSERT(theFile.Open(dlg.GetPathName(), CFile::modeWrite|CFile::modeCreate|CFile::modeNoTruncate|CFile::typeText ));
    CArchive archive(&theFile, CArchive::store);
    Serialize(archive);
    //close 
    archive.Close();
    theFile.Close();
    }
    }
    读时的
    void CDlgAnyTest::OnFileOpen() 
    {
    CFileDialog dlg(TRUE,_T("at"),NULL,OFN_OVERWRITEPROMPT,_T("*.at|*.*||"));
    if(dlg.DoModal()==IDOK)
    {
    CFile theFile;
    ASSERT(theFile.Open(dlg.GetPathName(), CFile::modeRead));
    CArchive archive(&theFile, CArchive::load);
    Serialize(archive);
    //close 
    archive.Close();
    theFile.Close();
    }
    UpdateData(FALSE);
    }