关于MFC读取文件问题

用CFileDialog打开选择文件的对话框来读取文件,读取debug文件里的文件正常,但是想读取别的地方的文件就会出错,听说好像是要把默认路径从别的地方设回debug,... 用CFileDialog打开选择文件的对话框来读取文件,读取debug文件里的文件正常,但是想读取别的地方的文件就会出错,听说好像是要把默认路径从别的地方设回debug,不知道怎么做,求解,采纳后再追加50分,因为经常悬赏了得不到答案,分就浪费了很可惜
CString PathName;
CFileDialog fileDlg(TRUE);
if(fileDlg.DoModal()==IDOK)
{
PathName = fileDlg.GetPathName();
if(Load(PathName))
{
Release();
m_PPTRes.clear();
Init();
}
展开
 我来答
百度网友96ffcf7
2015-08-15 · 知道合伙人互联网行家
百度网友96ffcf7
知道合伙人互联网行家
采纳数:22721 获赞数:118725
从事多年网络方面工作,有丰富的互联网经验。

向TA提问 私信TA
展开全部
使用MFC读取文件中的内容是程序设计中经常用到的功能
CFileDialog cFileDialog( TRUE, NULL, NULL, OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT|OFN_ALLOWMULTISELECT,
"All Files (*.*)|*.*||", AfxGetMainWnd());//第1步 取得路径
CString strFilePath = "";
CString strFileName = "";
if(cFileDialog.DoModal()==IDOK)
{
m_strFilePath = cFileDialog.GetPathName();
strFileName = cFileDialog.GetFileName();

UpdateData(false);
}
int input = 0;

ifstream inout;

inout.open(strFileName,ios::in);
if(!inout)
{
cerr<<"Unable to open file!"<<endl;
}
else
{
cout<<"打开文件成功"<<endl;
}
char nextline[256];
CString temp_str = "";
CString m_temp = "";

while(inout.getline(nextline, sizeof(nextline)))
{

temp_str = nextline;

m_temp += temp_str;
m_temp += "\r\n";  //MFC的编辑框需要使用“\r\n”来识别换行,单单一个“\n”是不够的。

}
m_original = m_temp ;
AfxMessageBox(m_original);
UpdateData(false);
inout.close();
inout.clear();
HoboSoft
2012-04-19 · TA获得超过162个赞
知道小有建树答主
回答量:292
采纳率:0%
帮助的人:304万
展开全部
应该是你代码中对路径处理不正确导致的问题,贴出你的代码来帮你看看。
追问
不是读取不了文件啊,是读取非DEBUG文件夹里的文件就会报错终止
追答
你的错误应该是在file.Open这一句出错了吧,是不是你传入的name仅仅是文件名,不带全路径啊?如果,是的话,修改你前面的代码,在调用Load函数的时候,保证传入的name参数是全路径,这样能保证你的file对象能正确打开指定路径的文件。

CFileDialog dlg;
if(dlg.DoModal() == IDOK)
{
CString strFilePathName;
strFilePathName = dlg.GetPathName( );
Load(strFilePathName );
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
阔海的账户
2012-04-19 · TA获得超过214个赞
知道小有建树答主
回答量:161
采纳率:0%
帮助的人:241万
展开全部
用CFileDialog打开选择的文件时,用GetFileName只能获得选择文件的文件名,用GetPathName则可以获得选择文件的包含路径的全文件名。通常Debug文件夹是默认路径,所以用GetFileName只能打开默认文件夹的文件。
从你说的现象来看,可能你用了GetFileName。
下面是一个例子:

CFileDialog dlg;
if(dlg.DoModal() == IDOK)
{
CString strFilePathName;
strFilePathName = GetPathName( );
//打开文件 strFilePathName。。。。。。
}

仅供参考。
追问
我用的的确是GetPathName( );啊
追答
报错是在对话框选择文件的时候,还是选好了文件Load文件的时候?把错误提示对话框贴出来看看。

Load的定义:bool CMapEditorDlg::Load(const char* name);

调用方式为 Load((LPCSTR)(PathName))
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式