我在MFC中先建一个单文档应用程序,并新建了一个对话框,在此对话框中添加一些单选控件和编辑控件,还有保存按钮,和计算按钮。我在保存按钮中编辑文件写入函数,目的是存放单选和编辑控件输入的信息,并给文件指定了具体的保存文件夹。在计算按钮中,需要调用.EXE文件,该文件是利用FORTRAN编写的计算程序,可以根据写入文件中的数据进行计算。
我现在面临的问题是,执行程序时,向单选按钮和编辑控件输入参数,然后按保存按钮,文件显示已经保存到指定文件夹中,然而点计算按钮时没有反应。但是如果再次执行程序,此时不向对话框中输入任何数据,只是点击计算按钮,则会实现计算过程。而且计算时用到的数据来自上一次保存的文件。
不知道这是怎么回事,请各位高手帮帮忙呀!!!
我现在面临的问题是,执行程序时,向单选按钮和编辑控件输入参数,然后按保存按钮,文件显示已经保存到指定文件夹中,然而点计算按钮时没有反应。但是如果再次执行程序,此时不向对话框中输入任何数据,只是点击计算按钮,则会实现计算过程。而且计算时用到的数据来自上一次保存的文件。
不知道这是怎么回事,请各位高手帮帮忙呀!!!
解决方案 »
- BITMAP位图加载错误~跪求高人指点~
- 在vc++里得到键盘按下的键值(特急 150分的题!!!)
- 一个简单的教室查询系统,谁来帮我看一下问题在哪里?
- browse information doesn't contain a class named ' '问题。。在线等待!!!
- DWORD怎么转化为CString
- 用ATL开发COM,能用链表吗
- 怎样让我的程序运行时,始终在最前面
- 关于WINDOWS程序设计的消息机制问题???
- listview中的文件拖到资源管理器,如何获取当前资源管理器中文件夹的路径?
- 遇到了一件奇怪的事情注册不了DLL文件
- 求助各位大侠,关于滚动条的问题
- MFC程序使用UNICODE字符集,但是到底用了什么编码呢?
当你关闭程序的时候,系统会帮你把文件close掉,下次你再启动程序的时候就可以调用exe来计算了。
先看保存了没有,有没有保存的文件,如果有文件,看看内容对不对。如果内容也对,核对数据格式看看是不是FORTRAN需要的。如果格式也对,再检查参数是否都有效。就这些啦!
有保存的文件,内容也对,数据格式也是对的。也用close了,还换用了下flush.
为什么,.EXE会用上一次保存的数据呢?
exe的数据不是从文件里读取的么,从文件里读取的话读到的就是上一次保存的数据呗。
你第一次点计算的时候,没有计算,是什么反应?
{
CFileDialog gongzuo1Dlg(FALSE);
gongzuo1Dlg.m_ofn.lpstrFilter="Text Files(*.dat)\0*.dat\0All Files(*.*)\0*.*\0\0";
gongzuo1Dlg.m_ofn.lpstrDefExt="dat";
if(IDOK==gongzuo1Dlg.DoModal())
{
CFile gongzuo1(gongzuo1Dlg.GetFileName(),CFile::modeCreate|CFile::modeWrite);
gongzuo1.Write(
"读入气体分子标识,IMOL=1,2,3,4,5分别代表H2O CO2 CO NO NO2\r\n",
strlen("读入气体分子标识,IMOL=1,2,3,4,5分别代表H2O CO2 CO NO NO2\r\n"));
if(m_occupation==1)
gongzuo1.Write("1", strlen("1"));
if(m_occupation==2)
gongzuo1.Write("2", strlen("2"));
if(m_occupation==3)
gongzuo1.Write("3", strlen("3"));
if(m_occupation==4)
gongzuo1.Write("4", strlen("4"));
if(m_occupation==5)
gongzuo1.Write("5", strlen("5"));
gongzuo1.Write("\r\n",strlen("\r\n"));
gongzuo1.Write("计算温度(300-3000K),TEM\r\n",strlen("计算温度(300-3000K),TEM\r\n"));
CString str_tem="";
GetDlgItemText(IDC_EDIT5,str_tem);
gongzuo1.Write(str_tem,str_tem.GetLength());
gongzuo1.Write("\r\n",strlen("\r\n"));
gongzuo1.Write("总压(单位 Pa),PTOT\r\n",strlen("总压(单位 Pa),PTOT\r\n")); CString str_ptot="";
GetDlgItemText(IDC_EDIT4,str_ptot);
gongzuo1.Write(str_ptot,str_ptot.GetLength());
gongzuo1.Write("\r\n",strlen("\r\n"));
gongzuo1.Write("输出文件名\r\n",strlen("输出文件名\r\n"));
CString str_w="";
GetDlgItemText(IDC_EDIT7,str_w);
gongzuo1.Write(str_w,str_w.GetLength()); gongzuo1.Close();}}
1、 UI获取值写入文件(UI->file)'
2、从文件获取值读到FORTRAN值运算。(file->FORTRAN->运算);这样就分开2步进行检测了
如果是第一步的话 就先将启动第2步的代码屏蔽掉 然后在第一步完成的时候。执行完close();但是程序还没有退出的时候 删除一下文件试试 如果是文件依然被占用 删除文件会失败的。另外要查看下文件里面的内容是否正确。第二步 要确认文件中在读取的时候文件中已经有写入的有效值 如果没有的话 肯定可以归结为第一步的问题。如果有了的话 就要留意第二步有啥问题了
void CGongzuo1::OnButton2()
{
ShellExecute(NULL,"open",
"infrared",NULL,NULL,SW_RESTORE);
}
“如果是第一步的话 就先将启动第2步的代码屏蔽掉 然后在第一步完成的时候。执行完close();但是程序还没有退出的时候 删除一下文件试试 ”
按照你说的可以删除文件,接下来该怎样处理呀???!!!
你这样试试
创建文件之后手动运行fortran程序
看看能不能正常运算
{
CFile gongzuo1(gongzuo1Dlg.GetFileName(),CFile::modeCreate|CFile::modeWrite);
//.....
//除了写文件外,没见你把文件名保存下来啊
//你确定FORTRAN 程序打开的是上面获得的文件吗?
gongzuo1.Close();} }
void CGongzuo1::OnFileWrite()
{
// TODO: Add your control notification handler code here
char temp[1024];
GetCurrentDirectory(1024,temp);
。
。
。
SetCurrentDirectory(temp);
}