VC 逐行读取txt文件及字符串的分割问题!急急急

Painot 2013-06-20 11:10:25
我想要读取本地的txt文件,想用CStadio类的ReadString()函数来逐行读取,
CStdio file;file.Open(_T("main.txt"),CFile::modeRead);返回总是失败,希望高手指点一二。
用上述的ReadString()方法拿到的数据是放在CString类型里面的,那么这个CString字符串怎么进行切割呢!
...全文
510 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
Painot 2013-07-05
  • 打赏
  • 举报
回复
不是的,是因为WIN7的桌面文件是有文字的,不是文件属性显示出来的那个路径,所以才打不开的!换在其他位置就能打开了。谢谢大家了,结贴了,撒分了。。。。
sumos 2013-06-21
  • 打赏
  • 举报
回复
逐行读取,我觉得用c++的ifstream配合getline函数(可以指定遇到什么字符后结束此次读取,不担心空格问题)最方便
Painot 2013-06-21
  • 打赏
  • 举报
回复
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();
}
}

这是我Down下来的程序,能实现,但是当我把它移植后,就会报错!
Painot 2013-06-21
  • 打赏
  • 举报
回复
路径不是绝对路径的么?
CString ii = _T("C:\\Users\\Administrator\\Desktop\\tesr.txt");
if (!myfile.Open(_T(ii), CFile::modeRead))
{
::AfxMessageBox(_T("文件打开失败。"));
return FALSE;
}

这样难道有问题么?我读取的是桌面txt文件
Eleven 2013-06-21
  • 打赏
  • 举报
回复
文件的路径不对吧,用绝对路径试试 可以使用CString::Tokenize()来分割字符串
shen_wei 2013-06-21
  • 打赏
  • 举报
回复
看你的路径和文件名是否正确。。。
jimette 2013-06-21
  • 打赏
  • 举报
回复
CStdio file;file.Open(_T("main.txt"),CFile::modeRead);返回总是失败 --------- 看看返回值是多少 用getlasterror查询
向立天 2013-06-21
  • 打赏
  • 举报
回复
问题1 你的路径正确么 问题2 CString有Mid、find、left、right等很多处理函数
zgl7903 2013-06-21
  • 打赏
  • 举报
回复
引用 楼主 lyshuai2008 的回复:
我想要读取本地的txt文件,想用CStadio类的ReadString()函数来逐行读取, CStdio file;file.Open(_T("main.txt"),CFile::modeRead);返回总是失败,希望高手指点一二。 用上述的ReadString()方法拿到的数据是放在CString类型里面的,那么这个CString字符串怎么进行切割呢!
可能当前路径并不在你要打开文件的文件夹目录,使用绝对路径或以应用程序的相对路径构造出绝对路径 (GetModuleFileName), try catch 捕捉文件异常. CString 分割字符 可以使用 Tokenize; Find FindOneOf Mid 等类的函数
woshisange03 2013-06-21
  • 打赏
  • 举报
回复
CString FileContext_CS; CStdioFile file; file.Open(_T("main.txt"),CFile::modeReadWrite); file.ReadString(FileContext_CS); 要想得到一行一行的字符,我的思路是遍历CString判断isspace()为真的字符的位置,放到Vector里面,完事后用CString的Mid方法一个一个得到。
schlafenhamster 2013-06-21
  • 打赏
  • 举报
回复
那个文件 已 被 其他程序 打开 ?
Painot 2013-06-21
  • 打赏
  • 举报
回复
strPathName 的值就是一个文件的绝对路径,"C:\User\Administrator\Desktop\tesr.txt"我手动赋值的时候也是赋值一个桌面测试程序的绝对路径。报错就是file.Open返回值为0。程序自身是不会报错的,只是调用CStdioFile::Open函数的执行结果有问题。
schlafenhamster 2013-06-21
  • 打赏
  • 举报
回复
“就会报错”报什么错 ?
zgl7903 2013-06-21
  • 打赏
  • 举报
回复
引用 8 楼 lyshuai2008 的回复:
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();
	}
}
这是我Down下来的程序,能实现,但是当我把它移植后,就会报错!
AfxMessageBox(strPathName) 看看是什么值
Painot 2013-06-21
  • 打赏
  • 举报
回复
用什么函数无所谓,关键是能实现我的目标就OK了。文件操作真的很纠结.....

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧