MFC中CFile打开文件并读txt数据

fopen打开文件时,文件名是char型,CFile打开文件时,文件名是CString型CStringstr;char*str0;CFileDialogFileDlg(T... fopen打开文件时,文件名是char型,CFile打开文件时,文件名是CString型
CString str;
char* str0;
CFileDialog FileDlg( TRUE , _T("(*.txt)|*.txt"),_T("*.txt"),OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT ,_T("文本文件(*.txt)"));
FileDlg.m_ofn.lpstrInitialDir=_T("\\Hard Disk\\Liu.hj\\Arc");
if(FileDlg.DoModal()==IDOK)
{
AfxMessageBox( FileDlg.GetPathName() );
str=FileDlg.GetPathName( );
}

str0= (LPSTR)(LPCTSTR)str;
m_cha=str0;
UpdateData(false);
上面是我的程序,在C++6.0理没问题,但是我在VS2008的MFC中是有问题的,所以我想用CFile,直接用str打开文件,就不再需要强制转换了
展开
 我来答
wwylele
2014-09-12 · TA获得超过2523个赞
知道小有建树答主
回答量:1037
采纳率:0%
帮助的人:1086万
展开全部
读取txt还是fopen用得方便,至于与CString的沟通,可以这样做:
包含头文件<tchar.h>
将fopen改为_tfopen,具体这样写
_tfopen(str/*CString类型的对象,不需要显式强制转换*/ ,_T("rt")/*注意这个_T*/)
然后接下来就能进行文件的读写了
然后建议楼主查阅一下 char和wchar_t两种字符类型,标准库对不同字符类型的支持,CString的类型自动切换等等的相关资料,就明白这样写的道理了
更多追问追答
追问
我是在VS2008的MFC中,我的编译类型设置为UNICODE,我把fin=fopen (str,"r")改为fin= _tfopen(str,"r"),出现了下面的错误
error C2664: '_wfopen' : cannot convert parameter 2 from 'const char [2]' to 'const wchar_t *'
追答
你没看我写的吗,第二个参数要加"_T",也就是
fin= _tfopen(str,_T("r"));
来自:求助得到的回答
牟古龙镶rE
2014-09-12 · TA获得超过115个赞
知道答主
回答量:126
采纳率:0%
帮助的人:126万
展开全部
为什么只读2个字符:因为mFile.Read(sRead,2),第二个参数指定了最多读几个字符。你自己指定了读两个字符。

为什么输出了文件名。没有代码没法准确判断。我估计跟缓冲区溢出有点关系,你可以试着把sRead数组改大一点。
请采纳。
追问

那如果我把CString型的str数据转化为char型的str0数据,怎么转换。即如上图char*和wchar_t*相对应,谢谢。。。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式