关于文件操作的问题,有经验的朋友进来提提意见!

alexmayer 2004-06-10 05:54:45
我有一个程序运行前或运行过程中要改变运行参数,当然要读取文件,我用的是INI文件。

请问,在何处读文件、存文件?重载OnOpenFile、OnSave函数,还是修改菜单,加入新的IID和对应的处理过程?

我没什么经验,以前只作过简单的控制台程序,希望得到前辈的指点?!
...全文
178 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangtao641 2004-06-10
  • 打赏
  • 举报
回复
Windows INI文件,可解释为Windows初始化文件。它是一种专门用来保存应用程序初始化信息和运行环境信息的文本文件。我从没有做过度去ini文件,但是既然也属于文本文件,按照c++读取txt文件或许可以实现读取吧。以前做过读取txt文件。如果对vc++使用不熟,可以用c/c++的函数,一样可以实现的。我将以前做的一个读取txt文件的代码传上,希望对你有用。
//.h
public:
int MAX ; //图像最大数据量
int *image; //存储图像数据
int line,sample,dvalue,value; //图像行列、附加高程值,临界高程 ,
int bands,linformat; // 波段数 数据行组织格式
char read_file[20]; //利用字符串定义实际输入文件名及路径
char write_file[20];//利用字符串定义实际输出文件名及路径
CString filepath; //保存文件路径
char text1[10],Path[250],Dimension[250],LinFormat[250],text2[10]; //存txt文件头五行字符串

//.cpp
void CDEMDlg::OnOpenDem()
{
// TODO: Add your control notification handler code here
CFileDialog *FileDlg; CWnd *cw; HWND h;
FileDlg = new CFileDialog(TRUE, "txt", "layer", OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
"图像TXT文件(*.txt)|*.txt|所有文件(*.*)|*.*||\0", NULL);

if(FileDlg->DoModal() == IDOK)
{
filepath = FileDlg->GetPathName();
strcpy(read_file, filepath); //将选择的文件的路径赋予全局变量read_file
}

//读取文件
ifstream in_file;//定义一个输入文件
in_file.open(read_file,ios::in); //打开选择的作文件
if(!in_file)
{
AfxMessageBox("打开文件错误。请检查文件盘后再试");
exit(1);
}
in_file.getline(text1,10); //从输入文件读 ; 字符行
in_file.getline(Path,250); //从输入文件读文件路径行字符串
in_file.getline(Dimension,250); //从输入文件读图象大小数据
in_file.getline(LinFormat,250); //从输入文件读图象行格式数据
in_file.getline(text2,10); //从输入文件读 ; 字符行
// MessageBox(Dimension); ///
if(text1[0]!=';'||Path[0]!=';'||Dimension[0]!=';'||LinFormat[0]!=';'||text2[0]!=';')
{
MessageBox("输入非法格式文件,请看帮助!", "文件错误", MB_ICONERROR | MB_OK);
exit(0);
}

//获得图像行列数
getsamp_line(Dimension,&line,&sample);
MAX=6*line*sample+1; //图像像元数+1
image=new int[MAX]; //分配内存
if(image==NULL) //如果分配不成功。
AfxMessageBox("内存分配失败,数据太大!!!");
for(int i=0;i<MAX;i++)
{
in_file>>ws>>image[i];//将图像文件数据读入到数组中*/ws用于文件输入且忽略空格
}
UpdateData(TRUE);//刷新
////修改用户界面
GetDlgItem(IDC_OPEN_DEM,&h); cw=FromHandle(h); cw->EnableWindow(FALSE);
GetDlgItem(IDC_PARAMETER,&h); cw=FromHandle(h); cw->EnableWindow(TRUE);
UpdateData(TRUE);


}
vcforever 2004-06-10
  • 打赏
  • 举报
回复
>>>>>MMI.ini程序刚启动时就要调用
你可以在你的应用程序类CXXApp的OnInitInstance()函数中来读取这个文件,在程序运行之初从文件中读取参数来配置你的应用程序!
读取ini文件你可以使用GetPrivateProfileString()等函数来完成,这族API函数MSDN中有详细的说明

至于stn01.ini文件,视你的这个个性化配置视配置什么内容,如果视配置某个试图或者对话框的界面的化,可以在他们的初始化函数中打开这个文件,读取其中的配置参数.

如果想在程序中提供编辑该文件的功能可以在某个菜单的相应函数中打开这个文件,来修改其中的参数

点新建的时候生成stn02.....这个功能可以自己用新建文件的方式完成,创建一个ini文件(可以使用CFile类来新建文件)!

希望对你有所帮助!
zhucde 2004-06-10
  • 打赏
  • 举报
回复
被楼主说得晕头转向
alexmayer 2004-06-10
  • 打赏
  • 举报
回复
自己UP

我是菜鸟,大虾多多帮助
alexmayer 2004-06-10
  • 打赏
  • 举报
回复
是SDI,一个通信监视程序,每次监视前可以打开已经存在的设置或新建一个设置便于将来的显示。

有一个全局(姑且这么称呼)的INI文件(MMI.ini),程序刚启动时就要调用,对于不同的文档它都是一样的?

然后通过菜单可以选择“打开以有的”,此时就是打开个性设置文件(stn01.ini)。

那么,mmi.ini的打开处理放在何处?stn01.ini的打开处理放在何处?

“新建”时生成新的stn02.ini,它的处理有应该在那里?
leojay 2004-06-10
  • 打赏
  • 举报
回复
描述不是很清楚,你做的是什么界面的程序?对话框,SDI还是MDI?
对话框的话,该什么时候操作就什么时候操作,SDI和MDI在OnNewDocument,OnOpenDocument,OnSaveDocument里写代码就好了。

16,471

社区成员

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

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

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