C++打开文件老是失败

qq_37666684 2017-07-21 06:05:17
文件名格式一开始是CString转化为char*后发生变化,调试的时候
显示strFileName是“C420150311214100000.csv”,(引号内为我实际的文件名加后缀)但是转换以后的cFileName就是0x0015cdb8“C420150311214100000.csv”,然后文件就一直打开失败,刚刚接触,菜鸟一枚,求高手指点啊啊啊啊啊啊
void CMy0720_mydrawDlg::OnBnClickedButton4()//1064nm按键
{
// TODO: 在此添加控件通知处理程序代码

// 设置过滤器
TCHAR szFilter[] = _T("文本文件(*.csv)|*.csv|所有文件(*.*)|*.*||");
// 构造打开文件对话框
CFileDialog fileDlg(TRUE, _T("csv"), NULL, 0, szFilter, this);
CString strFilePath;
CString strFileName;
//char szTemp[128];
//memset(szTemp,0,128);

// 显示打开文件对话框
if (IDOK == fileDlg.DoModal())
{
// 如果点击了文件对话框上的“打开”按钮,则将选择的文件路径显示到编辑框里
strFilePath = fileDlg.GetPathName();//获取文件路径
strFileName = fileDlg.GetFileName();//获取文件名称
SetDlgItemText(IDC_EDIT4, strFilePath);

//转换
char * cFileName =strFileName.GetBuffer(strFileName.GetLength());
strFileName.ReleaseBuffer();



int hang=CountLines(cFileName);

}
int CMy0720_mydrawDlg::CountLines(char *filename)
{
ifstream ReadFile;
int n=0;
string temp;
ReadFile.open(filename,ios::in);//ios::in 表示以只读的方式读取文件
if(ReadFile.fail())//文件打开失败:返回0
{
return 0;
}
else//文件存在,返回文件行数
{
while(getline(ReadFile,temp))
{
n++;
}
return n;
}
ReadFile.close();
}
...全文
527 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_37666684 2017-07-23
  • 打赏
  • 举报
回复
啦啦啦,谢谢大家,帮助都是我需要改进的地方,在这里分享一下我最后怎么改好的,上面程序中传递的变量是文件名,一直打不开,让他传递文件路径,按照路径打开文件,就OK,返回值就是所打开文件的行数
qq_37666684 2017-07-22
  • 打赏
  • 举报
回复
三楼这样试了,可以返回n++吗?我是在mfc下面写的,真的不知道为啥,打不开文件
qq_37666684 2017-07-22
  • 打赏
  • 举报
回复
引用 3 楼 zgl7903 的回复:
int CMy0720_mydrawDlg::CountLines(char *filename)
{
  ifstream ReadFile;
  int n=0;
  string temp;
  ReadFile.open(filename,ios::in);//ios::in 表示以只读的方式读取文件
  if(!ReadFile.fail())//文件打开失败:返回0
  {
    while(getline(ReadFile,temp))
    {
      n++;
    }
    ReadFile.close();
  }
   return n;
}
这样改了以后还是不行,就是还是文件打开失败,不能返回n++,依然只能返回零
zgl7903 2017-07-22
  • 打赏
  • 举报
回复
int CMy0720_mydrawDlg::CountLines(char *filename)
{
  ifstream ReadFile;
  int n=0;
  string temp;
  ReadFile.open(filename,ios::in);//ios::in 表示以只读的方式读取文件
  if(!ReadFile.fail())//文件打开失败:返回0
  {
    while(getline(ReadFile,temp))
    {
      n++;
    }
    ReadFile.close();
  }
   return n;
}
zgl7903 2017-07-22
  • 打赏
  • 举报
回复
return n; //已经返回 文件没有关闭 } ReadFile.close();
schlafenhamster 2017-07-22
  • 打赏
  • 举报
回复
要么 用 std::string 要么 CString , 不要 2个 都用
schlafenhamster 2017-07-22
  • 打赏
  • 举报
回复
ifstream ReadFile(file_name.c_str(),ios::in);
qq_37666684 2017-07-21
  • 打赏
  • 举报
回复
啦啦啦,大家看见帮下忙

16,472

社区成员

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

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

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