MFC读取文件中利用CFileDialog类打开文件,出现对话框后,点击取消出现问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MFC读取文件中利用CFileDialog类打开文件,出现对话框后,点击取消出现问题相关的知识,希望对你有一定的参考价值。

代码如下:
CString fileName;
CFileDialog dlg(true,"","",OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,"TxT file(*.txt)|*.txt");
if (dlg.DoModal()==IDOK)

fileName=dlg.GetPathName();


CStdioFile myFile;
CFileException fileException;
int order=1;
double *pBuf;
pBuf=new double[order+100];
double nBuf;
if(myFile.Open(fileName,CFile::modeCreate|CFile::modeNoTruncate|CFile::typeText|CFile::modeReadWrite),&fileException)

CString strContent;
while(myFile.ReadString(strContent))

nBuf=atof(strContent);
pBuf[order]=nBuf;
order=order+1;

UpdateData(TRUE);
m_Path=fileName;
m_Check=pBuf[9];
UpdateData(FALSE);
delete []pBuf;
pBuf=NULL;


else

TRACE("Can't open file");

myFile.Close();
点击取消出现问题:

参考技术A CString fileName;
CFileDialog dlg(true,"","",OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,"TxT file(*.txt)|*.txt");
if (dlg.DoModal()==IDOK)

fileName=dlg.GetPathName();

之后加上一个判断,如:
if(fileName.IsNull)return;
参考技术B 点击取消就是什么都不做 程序应该返回 在if(IDOK == )后加个else return;追问

我用MFC把已有的两个数组里面的数据读入到新建的EXCEL表格的两列,怎么操作啊?
用的是MFC读取EXCEL的Automation,接口。有excel.h等两个函数。
我现在按照MFC中使用EXCEL方法及源码.,这篇文章,只能实现一列的输出,怎么实现两列的输出?

追答

这玩意儿百度一大把现成的 不再说了.

参考技术C 用OLE的方式你想实现的是什么什么?双列读出?双列写入?
注意Range的成员函数GetValue2、SetValue2追问

恩,就是的,我现在想的是多列输出,要用range[0].......range[7]吗,但是这是不是就要多个数组与之对应了啊?这是不是有点麻烦?

追答

Eg:
int i=2; //题标行一般不会写
while (i<=1000)

CString strIndex = "A"; //写第一列
strBuf.Format("%d",i);
strDanYuanGe = strIndex + strBuf;
range=sheet.GetRange(COleVariant(strDanYuanGe),COleVariant( strDanYuanGe)); //选中要操作的单元格
CString strWtire = "1";
range.SetValue2(COleVariant(strWtire));

strIndex = "B"; //写第二列
strBuf.Format("%d",i);
strDanYuanGe = strIndex + strBuf;
range=sheet.GetRange(COleVariant(strDanYuanGe),COleVariant( strDanYuanGe));
CString strWtire = "2";
range.SetValue2(COleVariant(strWtire));
i++;

Eg:
int i=1; //如果不读第一行(标题行),应设置为2.
while (i<=1000)

CString str;
CString strIndex = "A"; //读Ai单元格
strBuf.Format("%d",i);
strDanYuanGe = strIndex + strBuf;
range=sheet.GetRange(COleVariant(strDanYuanGe),COleVariant( strDanYuanGe)); //选中要操作的单元格
rValue=COleVariant(range.GetValue2());
rValue.ChangeType(VT_BSTR);
str = CString(rValue.bstrVal); //读出来的值

strIndex = "B"; //读Bi单元格,其他的的列,也可以这样设置
strBuf.Format("%d",i);
strDanYuanGe = strIndex + strBuf;
range=sheet.GetRange(COleVariant(strDanYuanGe),COleVariant( strDanYuanGe));
rValue=COleVariant(range.GetValue2());
rValue.ChangeType(VT_BSTR);
str = CString(rValue.bstrVal); //读出来的值
i++;

本回答被提问者采纳
参考技术D fgets.c文件报了个警告错误,在代码第60行。警告意思是:你传入的str变量是空的,但实际要求str不为空。走读下fgets.c的执行情况吧。追问

用的是MFC读取EXCEL的Automation,接口。有excel.h等两个函数。
我现在按照MFC中使用EXCEL方法及源码.,这篇文章,只能实现一列的输出,怎么实现两列的输出?

追答

Excel 的ATL接口里面有个Range接口,用它可以写多列数据。你可以查查它的用法。

MFC CFileDialog派生类在编译过程出现“error 没有与参数列表匹配的构造函数......”的问题

   CFileDialog派生类在编译过程出现“error 没有与参数列表匹配的构造函数实例参数类型为(int,const char[4],const char[6],int,const char[36],int)  .的问题

解决办法

右击项目---属性----配置属性-----常规-----字符集  选择“使用多字节字符集”即可~~~~撒花~~

以上是关于MFC读取文件中利用CFileDialog类打开文件,出现对话框后,点击取消出现问题的主要内容,如果未能解决你的问题,请参考以下文章

MFC文件的读写操作,类的序列化与反序列化,CFile,CFileDialog,CArchive,CStdioFile

MFC CFileDialog 只打开选择文件

MFC中CFileDialog使用方法

如何在 MFC 中使用 CfileDialog 选择特定文件

MFC怎么用CFileDialog打开一个txt文件,直接用系统自带的记事本打开就行~

MFC CFileDialog 阻止打开 *.ext.other_ext 文件