ifstream打开并读取文件出错

chenju829714 2011-04-06 02:16:33
代码
ifstream fin;
fin.clear(ios::goodbit);
if(!strImportFileName.IsEmpty())
{

fin.open(strImportFileName,ios::in);

if(fin.is_open() ==false)
{
return false;
}
else
while(fin)
{

string item;
getline(fin,item,'\n');
DouFoxDoc.push_back(item);

}
fin.close();

}
我的目的是打开一个文件,然后读进来写到DouFoxDoc中,但是这段代码一会能open能push_back,一会又不能,一会又只能打开,不能读push_back.我就崩溃了,望高手指点,急
...全文
497 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
chenju829714 2011-04-06
  • 打赏
  • 举报
回复
[Quote=引用 28 楼 pengzhixi 的回复:]
个人觉得你传进来的strImportFileName有问题。你最好输出下strImportFileName转换后的 字符串。
[/Quote]
传进来的是完整路径
pengzhixi 2011-04-06
  • 打赏
  • 举报
回复
个人觉得你传进来的strImportFileName有问题。你最好输出下strImportFileName转换后的 字符串。
chenju829714 2011-04-06
  • 打赏
  • 举报
回复
[Quote=引用 26 楼 pengzhixi 的回复:]
引用 25 楼 chenju829714 的回复:
引用 23 楼 pengzhixi 的回复:
ifstream fin(strImportFileName.GetBuffer(strImportFileName.GetLength()));//难道是这样的函数才能将CString转成char*

这个没看懂
先试试吧
[/Quote]
不行,依然return false
pengzhixi 2011-04-06
  • 打赏
  • 举报
回复
[Quote=引用 25 楼 chenju829714 的回复:]
引用 23 楼 pengzhixi 的回复:
ifstream fin(strImportFileName.GetBuffer(strImportFileName.GetLength()));//难道是这样的函数才能将CString转成char*

这个没看懂
[/Quote]先试试吧
chenju829714 2011-04-06
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 pengzhixi 的回复:]
ifstream fin(strImportFileName.GetBuffer(strImportFileName.GetLength()));//难道是这样的函数才能将CString转成char*
[/Quote]
这个没看懂
chenju829714 2011-04-06
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 pengzhixi 的回复:]
引用 21 楼 chenju829714 的回复:
我的strImportFileName是CString,是文件名

用一个char数组来存放strImportFileName转成成char*的文件名,然后直接用这个数组作为 ifstream fin(文件名)的参数。看看情况怎么样。只要文件名不会错不会有你说的那个情况
[/Quote]
咋写?
pengzhixi 2011-04-06
  • 打赏
  • 举报
回复
ifstream fin(strImportFileName.GetBuffer(strImportFileName.GetLength()));//难道是这样的函数才能将CString转成char*
pengzhixi 2011-04-06
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 chenju829714 的回复:]
我的strImportFileName是CString,是文件名
[/Quote]
用一个char数组来存放strImportFileName转成成char*的文件名,然后直接用这个数组作为 ifstream fin(文件名)的参数。看看情况怎么样。只要文件名不会错不会有你说的那个情况
chenju829714 2011-04-06
  • 打赏
  • 举报
回复
我的strImportFileName是CString,是文件名
chenju829714 2011-04-06
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 hpf976149 的回复:]
string strImportFileName = "文件名";
...
if(strImportFileName.size() > 0)
{
fin.open(strImportFileName.c_str(),ios::in);

...
[/Quote]
“c_str”: 不是“ATL::CStringT<BaseType,StringTraits>”的成员
CppCoder 2011-04-06
  • 打赏
  • 举报
回复
string strImportFileName = "文件名";
...
if(strImportFileName.size() > 0)
{
fin.open(strImportFileName.c_str(),ios::in);

...

chenju829714 2011-04-06
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 hpf976149 的回复:]
程序在if(fin.is_open() ==false) 会显示打开失败,然后直接return false;但是有的时候又能打开,可以执行else里面的while

关闭其他打开这个文件的编辑器
在使用前要关闭打开这个文件的句柄
[/Quote]
什么都没开,就一个vs
CppCoder 2011-04-06
  • 打赏
  • 举报
回复
程序在if(fin.is_open() ==false) 会显示打开失败,然后直接return false;但是有的时候又能打开,可以执行else里面的while

关闭其他打开这个文件的编辑器
在使用前要关闭打开这个文件的句柄
chenju829714 2011-04-06
  • 打赏
  • 举报
回复
汗!改了

if(!strImportFileName.IsEmpty())
{

ifstream fin(strImportFileName.GetBuffer(0));

//fin.open(strImportFileName,ios::in);

if(fin.is_open() ==false)
{
return false;
}
else
while(fin)
{

string item;
getline(fin,item,'\n');
DouFoxDoc.push_back(item);

}
fin.close();
strImportFileName.ReleaseBuffer();

}

依旧不行
chenju829714 2011-04-06
  • 打赏
  • 举报
回复
我改成了楼上这样,还是不行
pengzhixi 2011-04-06
  • 打赏
  • 举报
回复
ifstream fin(strImportFileName.GetBuffer(0));
fin.open(strImportFileName,ios::in);
这两个是冲突的。有一个即可
chenju829714 2011-04-06
  • 打赏
  • 举报
回复

if(!strImportFileName.IsEmpty())
{

ifstream fin(strImportFileName.GetBuffer(0));

fin.open(strImportFileName,ios::in);

if(fin.is_open() ==false)
{
return false;
}
else
while(fin)
{

string item;
getline(fin,item,'\n');
DouFoxDoc.push_back(item);

}
fin.close();
strImportFileName.ReleaseBuffer();

}
chenju829714 2011-04-06
  • 打赏
  • 举报
回复
还是不行哎
if(!strImportFileName.IsEmpty())
{

ifstream fin(strImportFileName.GetBuffer(0));

fin.open(strImportFileName,ios::in);

if(fin.is_open() ==false)
{
return false;
}
else
while(fin)
{

string item;
getline(fin,item,'\n');
DouFoxDoc.push_back(item);

}
fin.close();
strImportFileName.ReleaseBuffer();

}
我改成这样了,还是return false了
pengzhixi 2011-04-06
  • 打赏
  • 举报
回复
ifstream fin(strImportFileName.GetBuffer(0));
应该是这样。
chenju829714 2011-04-06
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 pengzhixi 的回复:]
strImportFileName是一个什么类型?
[/Quote]
cstring
加载更多回复(9)

64,634

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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