问题描述
- 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)
困惑很久了。究竟是哪里错了。。。
解决方案
这段代码的确没有修改文件,但是你有没有别的地方写了文件。打开文件什么也不做,在任务管理器强行关闭,看看会改文件么
解决方案二:
况且我设置了只读,不应该会改数据吧。。
解决方案三:
其实就是
File.ReadString(str); // 读取第一行,不保存
这句加上就有问题了。。搞不懂是咋回事了。。
时间: 2025-01-04 12:16:49