MFC对话框,想建立一个配置文件,如何做? 30

我们在做毕设,做的是一个基于P2P下载的应用,其中有个功能是开启的时候就下载,就是在菜单栏的工具选项中有一个选项是开启下载,我想用建立一个配置文件,将这一项是否标记记录在... 我们在做毕设,做的是一个基于P2P下载的应用,其中有个功能是开启的时候就下载,就是在菜单栏的工具选项中有一个选项是开启下载,我想用建立一个配置文件,将这一项是否标记记录在配置文件中,等到开启软件的时候查看该文件,如果选中,那么就自动开启下载,我想问一下,如何配置文件是什么格式的,(.txt /.log或者其他)。有没有一些资料是介绍该文件类型的?如何使用C++操作该文件。 展开
 我来答
沧海雄风2009
2013-03-22 · TA获得超过1.1万个赞
知道大有可为答主
回答量:8525
采纳率:79%
帮助的人:2855万
展开全部
其实什么格式的都无所谓

txt log 什么的都可以

但是还是建议你用系统的默认配置文件格式 ini

说白了 这不是格式 这个只是文件后缀名 是什么都没关系

为了规范才用.ini后缀的

关键是你文件里的格式

然后用文件操作进行解析

我以前做过MFC的FTP 和邮件发送

这个的确要用到。

如果 配置参数多 文件大的话 推荐用微软的专门解析ini文件的库

如果少 自己解析一下就行了 没必要调用这么大的库

(1)WritePrivateProfileSection()用来在ini文件中直接向指定区域写入键和值的信息,其原型如下:
BOOL WritePrivateProfileSection(
LPCTSTR lpAppName, // 指向指定字段的字符串
LPCTSTR lpString, // 指向要写入的键与值字符串
LPCTSTR lpFileName // 指向文件名称字符串,如果不包含完整路径,则在windows目录下创建
);
用法示例:
WritePrivateProfileSection(_T(“windows”),_T(“load=c:\\winnt\\notepad.exe”),_T(“c:\\winnt\\win.ini”));
(2)WritePrivateProfileString()与上一个函数的不同点在于其将键和值分开了,原型如下:
BOOL WritePrivateProfileString(
LPCTSTR lpAppName, // 指向指定字段的字符串
LPCTSTR lpKeyName, // 指向指定键的字符串
LPCTSTR lpString, // 指向指定值的字符串
LPCTSTR lpFileName // 指向文件名称字符串
);
用法示例:
WritePrivateProfileString(_T(“windows”),_T(load”)_T(“c:\\winnt\\notepad.exe”),_T(“c:\\winnt\\win.ini”));
(3)WritePrivateProfileStruct()与前面两个的不同在于文件尾有校验和,原型如下:
BOOL WritePrivateProfileStruct(
LPCTSTR lpszSection, //指向指定字段的字符串
LPCTSTR lpszKey, //指向指定键的字符串
LPVOID lpStruct, //指向存放要加入的数据的缓冲区,如果为NULL,则删除键
UINT uSizeStruct, //缓冲区大小,以字节为单位
LPCTSTR szFile //以零结尾的文件名称字符串,如果为空,则向win.ini写入
);
用法示例:
WritePrivateProfileStruct(_T(“windows”),_T(“load”),pBuffer,sizeof(pBuffer),_T(“c:\\winnt\\win.ini”));
(4)还有两个函数,是专门用来向win.ini文件写入的,函数原型如下:
BOOL WriteProfileSection(
LPCTSTR lpAppName, //指向指定字段的字符串
LPCTSTR lpString //指向指定值的字符串
);
BOOL WriteProfileString(
LPCTSTR lpAppName, //指向指定字段的字符串
LPCTSTR lpKeyName, //指向指定键的字符串
LPCTSTR lpString //指向指定值的字符串
);
下面来看几个对应的从ini文件获取信息的API函数,上面已经说得很详细了,这里只说其中两个:
DWORD GetPrivateProfileString(
LPCTSTR lpAppName, //指向指定字段的字符串
LPCTSTR lpKeyName, //指向键的字符串
LPCTSTR lpDefault, //如果INI文件中没有前两个参数指定的字段名或键名,则将此值赋给变量
LPTSTR lpReturnedString, //存放INI文件中值的目的缓存区
DWORD nSize, //目的缓冲区的大小,以字节为单位
LPCTSTR lpFileName //指向INI文件名称的字符串
);

UINT GetPrivateProfileInt(
LPCTSTR lpAppName, //指向指定字段的字符串
LPCTSTR lpKeyName, //指向键的字符串
INT nDefault, //如果INI文件中没有前两个参数指定的字段名或键名,则将此值赋给变量
LPCTSTR lpFileName //指向INI文件名称的字符串
);
程序示例1: 我们在这里建立了一个应用程序“App Name”,并且使用了一个INI文件“appname.ini”,在此INI文件中,我们写入如下内容:
[Section1]
FirstKey = It all worked out okay.
SecondKey = By golly, it works.
ThirdKey = Another test.
代码分析如下:
#include <stdio.h>
#include <windows.h>
//主函数
main()
{
//定义局部
CHAR inBuf[80];
HKEY hKey1, hKey2;
DWORD dwDisposition;
LONG lRetCode;
// 试图创建INI文件的键值
lRetCode = RegCreateKeyEx ( HKEY_LOCAL_MACHINE,
"SOFTWARE\\Microsoft\\Windows NT
\\CurrentVersion\\IniFileMapping\\appname.ini",
0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE,
NULL, &hKey1,
&dwDisposition);
//判断是否出错
if (lRetCode != ERROR_SUCCESS){
printf ("Error in creating appname.ini key\n");
return (0) ;
}
//试图设置一个节区的值
lRetCode = RegSetValueEx ( hKey1,
"Section1",
0,
REG_SZ,
"USR:App Name\\Section1",
20);
//判断是否出错
if (lRetCode != ERROR_SUCCESS) {
printf ( "Error in setting Section1 value\n");
return (0) ;
}
//试图创建一个应用名称键值
lRetCode = RegCreateKeyEx ( HKEY_CURRENT_USER,
"App Name",
0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE,
NULL, &hKey2,
&dwDisposition);

//判断是否出错
if (lRetCode != ERROR_SUCCESS) {
printf ("Error in creating App Name key\n");
return (0) ;
}
//强制系统重新读取映射区的内容到共享内存中,以便于将来对应用程序的调用可//以找到它,而不需要重新启动系统
WritePrivateProfileStringW( NULL, NULL, NULL, L"appname.ini" );
//向INI文件中添加一些键值
WritePrivateProfileString ("Section1", "FirstKey",
"It all worked out okay.", "appname.ini");
WritePrivateProfileString ("Section1", "SecondKey",
"By golly, it works.", "appname.ini");
WritePrivateProfileSection ("Section1", "ThirdKey = Another Test.",
"appname.ini");
//测试一下添加的正确性
GetPrivateProfileString ("Section1", "FirstKey",
"Bogus Value: Get didn't work", inBuf, 80,
"appname.ini");
printf ("%s", inBuf);
return(0);
}

程序示例2:通过修改win.ini中的字段[windows]中的键load或run,或者是为system.ini中的字段[boot]中的键 shell增加值,可以达到设置程序自动运行的目的。假设我们要自动运行notepad.exe,修改后的win.ini或system.ini文件象这 样就可以:
win.ini
[windows]
load=c:\winnt\notepad.exe
run=c:\winnt\notepad.exe

system.ini
[boot]
shell=c:\winnt\explorer.exe c:\winnt\notepad.exe
注意:system.ini文件的修改要特别注意,如果你单纯改成shell=c:\winnt\notepad.exe,则不能首先运行 explorer.exe,很明显你将看不到桌面和任务栏,呵呵,笔者在做实验时就曾因为粗心造成了这样的后果,不过不用害怕,只要你用我们下面提供的程 序,将它修改过来就可以了,默认时,系统在system.ini中的[boot]下是shell=c:\winnt\explorer.exe。很多非法 程序就是通过修改这两个文件来达到自启动的目的的。
下面这个程序可以在附书光盘中找到,名称为“AutoPlay”,使用VC++6.0写成,核心程序源代码如下:
void CAutoRunDlg::OnBrowse()
{
//只浏览exe文件
CfileDialog fileDlg(TRUE,_T("EXE"),_T("*.exe"),OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,(_T("Executable Files (*.exe) |*.exe ||")));//显示打开文件的对话框

//当操作者选择OK时,程序取得选择文件的全路径名(包括文件的路径及文件名称),并将相应的数值传输给相关的控件变量。
if(fileDlg.DoModal()==IDOK)
{
m_strFileName=fileDlg.GetPathName();

//向将变量中的数值传输给控件显示出来。
UpdateData(FALSE);
}
}
void CAutoRunDlg::OnApply()
{
//更新数据
UpdateData(TRUE);
//写入ini文件
LPCTSTR filename;
filename=m_strFileName;
WritePrivateProfileString(_T("windows"),_T("load"),filename,_T("c:\\winnt\\win.ini"));
}

您如果要更改system.ini,可以将WritePrivateProfileString(_T("windows"),_T("load"),filename,_T("c:\\winnt\\win.ini"));
改为 WritePrivateProfileString(_T("boot"),_T("shell"),filename,_T("c:\\winnt \\system.ini"));并且在输入文件名时输入c:\winnt\explorer.exe c:\winnt\notepad.exe。
写到这里,本文的意图基本达到,如果您可以把某些代码亲自实现,相信读者会有比较大的收获。
百度网友3038d88
2013-03-22 · TA获得超过1097个赞
知道小有建树答主
回答量:1670
采纳率:0%
帮助的人:1169万
展开全部
GetPrivateProfileString

是读取规范 ini文件的函数.

参数 类型及说明
lpApplicationName String,欲在其中查找条目的小节名称。这个字串不区分大小写。如设为vbNullString,就在lpReturnedString缓冲区内装载这个ini文件所有小节的列表。
lpKeyName String,欲获取的项名或条目名。这个字串不区分大小写。如设为vbNullString,就在lpReturnedString缓冲区内装载指定小节所有项的列表
lpDefault String,指定的条目没有找到时返回的默认值。可设为空("")
lpReturnedString String,指定一个字串缓冲区,长度至少为nSize
nSize Long,指定装载到lpReturnedString缓冲区的最大字符数量
lpFileName String,初始化文件的名字。如没有指定一个完整路径名,windows就在Windows目录中查找文件
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
fulingling5
2013-03-22
知道答主
回答量:8
采纳率:0%
帮助的人:1.2万
展开全部
一般是ini文件,其实用txt也行,操作文件的类有CFile类,只要将你写入文件中的东西按你想要的方式写进去、读出来就行,如果用ini配置文件的话,可能涉及到键名和键值,建议你可以查一下,封装一个CIniFile的类,操作ini的配置文件,祝你成功
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式