c++-MFC CStdioFile::ReadString()的问题

问题描述

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

c++-MFC CStdioFile::ReadString()的问题的相关文章

VC/MFC 编程技巧大总结

 1 toolbar默认位图左上角那个点的颜色是透明色,不喜欢的话可以自己改. 2 VC++中 WM_QUERYENDSESSION WM_ENDSESSION 为系统关机消息. 3 Java学习书推荐:<java编程思想> 4 在VC下执行DOS命令 a. system("md c:\\12"); b. WinExec("Cmd.exe /C md c:\\12", SW_HIDE); c. ShellExecute ShellExecute(NULL

c++-C++/MFC 文本文件读取

问题描述 C++/MFC 文本文件读取 由于电脑断电,文本文件异常保存,保存的文件如下:(图1为二进制,图二为 记事本) 文件表现中间出现 00, CStdioFile ReadString 时读到蓝色标记处,即 00 位置,认为文件已经结束,下面的内容无法读取,请问这种情况应如何处理! 解决方案 用c++标准库ifstream读试试,getlinehttp://en.cppreference.com/w/cpp/string/basic_string/getline 解决方案二: 00 00

CStdioFile的用法详细解析_C 语言

关于CStdioFileCStdioFile继承自CFile,一个CStdioFile 对象代表一个用运行时函数fopen 打开的C 运行时流式文件. 流式文件是被缓冲的,而且可以以文本方式(缺省)或二进制方式打开.文本方式提供对硬回车-换行符对的特殊处理.当你将一个换行符(0x0A)写入一个文本方式的CStdioFile 对象时,字节对(0x0D,0x0A)被发送给该文件.当你读一个文件时,字节对(0x0D,0x0A)被翻译为一个字节(0x0A). CStdioFile 不支持Duplicat

c++-求助!MFC ReadString()的问题

问题描述 求助!MFC ReadString()的问题 void RichEditView::ReadArticle(CString strName) { CString content = ""; CStdioFile File; CString fileName = strName; if (File.Open(fileName, CFile::modeRead | CFile::typeBinary)) { File.SeekToBegin(); CString str; Fil

io流-MFC读取txt文件内容的问题

问题描述 MFC读取txt文件内容的问题 我把读取文件的代码写在Dlg的OnInitDialog()函数里 当那个data文件只有一行的时候读取文件是可以正常运行的,只在后面有问题. 但data文件有两行的话就会停在getdata函数这里 CStringData* GetData() const throw() { return( reinterpret_cast< CStringData* >( m_pszData )-1 ); } 读文件代码如下: CStdioFile myFile; C

求mfc大神解答关于文件读写操作问题

问题描述 求mfc大神解答关于文件读写操作问题 iter = g_listPath.begin();//list.begin()回指向第一个元素while (iter != g_listPath.end()){ CNode curpos = *iter; CString str; CString strFileName=""mytest.txt""; CFile file; SYSTEMTIME st; GetLocalTime(&st); str.Form

mfc-小弟初学MFC,在文件读写方面遇到了问题

问题描述 小弟初学MFC,在文件读写方面遇到了问题 小弟初学MFC,在弄一个简单的学生管理系统,添加了一个对话框用于添加学生信息,然后在Add按钮添加了消息响应函数,对输入的数据进行写入到文件之中,但 是在判断是否读完的时候总是会出现问题,请教各位,代码如下: void Add::OnClickedIdbAdd() { // TODO: Add your control notification handler code here UpdateData(); if (!m_aComp || !m

c++-MFC 读取文本内容的问题

问题描述 MFC 读取文本内容的问题 void EditView::ReadTitle(CString strName) { CString content=""; CStdioFile file; CString fileName = strName; if (file.Open(fileName, CFile::modeRead | CFile::typeText)) { file.SeekToBegin(); CString str; int len = 512 - 2; fil

mfc线程挂起唤醒操作问题

问题描述 mfc线程挂起唤醒操作问题 HANDLE hThread; CWnd *pWnd; UINT TextShow(LPVOID pParam) { CString szLine; //打开文件 CStdioFile file; file.Open(_T("E:1.txt"), CFile::modeRead); //逐行读取字符串 while (file.ReadString(szLine)) { pWnd->SetWindowText(szLine); hThread