ProgJ 2016-03-01 05:33 采纳率: 50%
浏览 4162
已采纳

MFC CStdioFile::ReadString()的问题

想一行行读取数据,并且我希望是从第二行开始读取,即第一行的跳过去。
于是我用了ReadString(),并且打开文件后先读取第一行,但是不保存第一行的数据,然后从第二行开始储存数据,代码如下:

 void RichEditView::ReadArticle(CString strName)
{
    CMainFrame* pFrame = (CMainFrame*)AfxGetMainWnd();
    CString content = "";
    CStdioFile File;
    CString fileName = strName;
    if (File.Open(fileName, CFile::modeRead | CFile::typeBinary))
    {
        File.SeekToBegin();
        CString str = "";
        File.ReadString(str); // 读取第一行,不保存
        while (File.ReadString(str)) //从第二行开始逐行读取
        {
            content += str;
            AfxMessageBox(str);
        }
        File.Close();
    }
    else
        AfxMessageBox("读取失败!");
    ::SetWindowText(this->GetRichEditCtrl().m_hWnd, content);
}

运行正常的,正常读取出来,但是我读取完打开文件发现文本内容被改了。。
见图:
图片说明

原本的数据

图片说明

读取并显示(第一行和第二行是两个视图在显示)

图片说明

之后打开文本发现数据变了

图片说明

再次读取显示也出问题了

于是我把读取第一行的那个

 File.ReadString(str); // 读取第一行,不保存

语句注释掉,再重复上面的操作,一切正常,但是这显然不是我要的效果,
而且我发现貌似读取一次后,第二次读取显示的第一行是原来显示的第二行(即tttttt)
困惑很久了。究竟是哪里错了。。。

  • 写回答

3条回答 默认 最新

  • threenewbee 2016-03-01 05:51
    关注

    这段代码的确没有修改文件,但是你有没有别的地方写了文件。打开文件什么也不做,在任务管理器强行关闭,看看会改文件么

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler