c++ 按行读取txt文本

CStdioFile 类的声明保存在 afx.h 头文件中。
CStdioFile 类继承自 CFile 类, CStdioFile 对象表示一个用运行时的函数 fopen 打开的 c 运行时的流式文件。流式文件是被缓冲的,而且可以以文本方式(默认)或者二进制方式打开。
CStdioFile 类不支持 CFile 类中的 Duplicate LockRange UnlockRange 函数,如果你使用了,会得到 CNotSupportedException 类的错误。
CStringFile 类默认的是按照 Text 模式操作文件。 CFile 类默认的是按照二进制模式操作文件。
这里大致说明一下二进制模式和 Text 模式 的区别。
二进制模式:对于一行的结尾我们必须输入 ”/r/n” ,才能表示回车换行的效果。
Text 模式: ”/r” 回车的工作是自动完成的,我们只需要写入 ”/n” 即可。所以我们在使用文本模式时要注意,当我们从外部读入文件时, ”/r/n” 会被翻译成 ”/n” ,写入文件时,我们对于回车换行只需提供 ”/n” ,即可, ”/r/n” 会被写入到文件中。
m_pStream 成员变量:
      打开文件的指针。
 
构造函数:
CStdioFile();
CStdioFile(FILE *pOpenStream);
CStdioFile(LPCTSTR lpFileName, UINT nOpenFlags);
throw(CFileException);
FILE *pOpenStream :指的是 c 运行函数 fopen 调用后返回的文件指针。
LPCTSTR lpFileName :指的是被打开的文件(绝对地址或相对地址)
UINT nOpenFlags :指的是 CFile 类中所描述的打开文件的方式。
 
virtual LPTSTR ReadString(LPTSTR lpsz, UINT nMax);
throw(CFileException);
如果使用该函数读取文本文件,当遇到 ”/r/n” ,停止读取,并去掉 ”/r” ,保留 ”/n” ,并在字符串尾部增加 ”/0” nMax 的长度包含有 ”/0” 字符,
实际的分析如下:
如果 nMax <= 字符数,读取 (nMax-1) 个字符 +0x00
如果 nMax = 字符数 + 1 ,读取 nMax 个字符 +0x00
如果 nMax > 字符数,读取 nMax 个字符 +0x0A(”/n”) + 0x00
如果文件有多行,则当文件没有读完时,返回 NOT NULL ,读到文件尾,返回 NULL
 
BOOL ReadString(CString& rString);
throw(CFileException);
读取一行文本到 rString 中,遇到回车换行符停止读取,回车和换行符均不读到 rString 中,尾部也不添加 ”0x00”
如果文件有多行,则当文件没有读完时,返回 TRUE ,读到文件尾,返回 FALSE
 
virtual void WriteString(LPTSTR lpsz);
throw(CFileException);
将缓冲区中的数据写入到与 CStdioFile 对象相关联的文件中,不支持 CString 类型数据写入,结束的 ”/0” 不被写入到文件中, lpsz 缓冲区中的所有换行符被替换为回车换行符即 ”/n” 转换为 ”/r/n”
 
 
void CDemoDlg::OnReadFile() 
{
	CListBox* pListBox = (CListBox*)GetDlgItem(IDC_LIST);
	pListBox->ResetContent();

	//创建文件对话框
	CFileDialog dlg(TRUE, NULL, NULL, OFN_HIDEREADONLY | 
		OFN_OVERWRITEPROMPT, _T("文本文件(*.*)|*.*||"));

	if (dlg.DoModal() == IDOK)
	{
		//获得文件路径
		CString strPathName = dlg.GetPathName();

		CStdioFile file;

		//打开文件
		if (!file.Open(strPathName, CFile::modeRead))
		{
			::AfxMessageBox(_T("文件打开失败。"));
			return;
		}

		//读文件
		CString strText = _T("");
		while (file.ReadString(strText))
		{
			pListBox->AddString(strText);
		}

		//关闭文件
		file.Close();
	}
}

原文地址:https://www.cnblogs.com/dyllove98/p/3161580.html