好多软件都好像有记忆功能,更改后的参数能保持不变——下次运行还是这些参数!
比如:FlashGet的代理服务器设置 一次设置完毕后它能保持不变(只要不重新设置)
请问各位高手,这些功能是怎么实现的,通过写 ini文件还是其他的方法?

解决方案 »

  1.   

    1.VC可以将数据保存在Document中
    2.文件
    3.注册表
      

  2.   

    ini文件
    注册表
    数据库
      

  3.   

    有没有例子呀——写ini文件的??
      

  4.   

    回复人: rainbowinfog(浊清) ( ) 信誉:100  2003-8-20 22:43:03  得分:10 
     
     
      
    用Visual C++操作INI文件  
    作者:张腾跃   在我们写的程序当中,总有一些配置信息需要保存下来,以便完成程序的功能,最简单的办法就是将这些信息写入INI文件中,程序初始化时再读入.具体应用如下:   一.将信息写入.INI文件中.   1.所用的WINAPI函数原型为: BOOL WritePrivateProfileString( 
    LPCTSTR lpAppName, 
    LPCTSTR lpKeyName, 
    LPCTSTR lpString, 
    LPCTSTR lpFileName 
    );   其中各参数的意义:    LPCTSTR lpAppName 是INI文件中的一个字段名.    LPCTSTR lpKeyName 是lpAppName下的一个键名,通俗讲就是变量名.    LPCTSTR lpString 是键值,也就是变量的值,不过必须为LPCTSTR型或CString型的.    LPCTSTR lpFileName 是完整的INI文件名.   2.具体使用方法:设现有一名学生,需把他的姓名和年龄写入 c:\stud\student.ini 文件中. CString strName,strTemp; 
    int nAge; 
    strName="张三"; 
    nAge=12; 
    ::WritePrivateProfileString("StudentInfo","Name",strName,"c:\\stud\\student.ini");   此时c:\stud\student.ini文件中的内容如下:    [StudentInfo] 
       Name=张三   3.要将学生的年龄保存下来,只需将整型的值变为字符型即可: strTemp.Format("%d",nAge); 
    ::WritePrivateProfileString("StudentInfo","Age",strTemp,"c:\\stud\\student.ini"); 
      二.将信息从INI文件中读入程序中的变量.   1.所用的WINAPI函数原型为: DWORD GetPrivateProfileString( 
    LPCTSTR lpAppName, 
    LPCTSTR lpKeyName, 
    LPCTSTR lpDefault, 
    LPTSTR lpReturnedString, 
    DWORD nSize, 
    LPCTSTR lpFileName 
    );   其中各参数的意义:    前二个参数与 WritePrivateProfileString中的意义一样.    lpDefault : 如果INI文件中没有前两个参数指定的字段名或键名,则将此值赋给变量.    lpReturnedString : 接收INI文件中的值的CString对象,即目的缓存器.    nSize : 目的缓存器的大小.    lpFileName : 是完整的INI文件名.   2.具体使用方法:现要将上一步中写入的学生的信息读入程序中. CString strStudName; 
    int nStudAge; 
    GetPrivateProfileString("StudentInfo","Name","默认姓名",strStudName.GetBuffer(MAX_PATH),MAX_PATH,"c:\\stud\\student.ini");   执行后 strStudName 的值为:"张三",若前两个参数有误,其值为:"默认姓名".   3.读入整型值要用另一个WINAPI函数: UINT GetPrivateProfileInt( 
    LPCTSTR lpAppName, 
    LPCTSTR lpKeyName, 
    INT nDefault, 
    LPCTSTR lpFileName 
    );   这里的参数意义与上相同.使用方法如下: nStudAge=GetPrivateProfileInt("StudentInfo","Age",10,"c:\\stud\\student.ini");   三.循环写入多个值,设现有一程序,要将最近使用的几个文件名保存下来,具体程序如下:   1.写入: CString strTemp,strTempA; 
    int i; 
    int nCount=6; 
    file://共有6个文件名需要保存 
    for(i=0;i {strTemp.Format("%d",i); 
    strTempA=文件名; 
    file://文件名可以从数组,列表框等处取得. 
    ::WritePrivateProfileString("UseFileName","FileName"+strTemp,strTempA, 
    "c:\\usefile\\usefile.ini"); 

    strTemp.Format("%d",nCount); 
    ::WritePrivateProfileString("FileCount","Count",strTemp,"c:\\usefile\\usefile.ini"); 
    file://将文件总数写入,以便读出.   2.读出: nCount=::GetPrivateProfileInt("FileCount","Count",0,"c:\\usefile\\usefile.ini"); 
    for(i=0;i {strTemp.Format("%d",i); 
    strTemp="FileName"+strTemp; 
    ::GetPrivateProfileString("CurrentIni",strTemp,"default.fil", strTempA.GetBuffer(MAX_PATH),MAX_PATH,"c:\\usefile\\usefile.ini"); file://使用strTempA中的内容. }   补充四点:    1.INI文件的路径必须完整,文件名前面的各级目录必须存在,否则写入不成功,该函数返回 FALSE 值.    2.文件名的路径中必须为 \\ ,因为在VC++中, \\ 才表示一个 \ .    3.也可将INI文件放在程序所在目录,此时 lpFileName 参数为: ".\\student.ini".    4.从网页中粘贴源代码时,最好先粘贴至记事本中,再往VC中粘贴,否则易造成编译错误,开始时我也十分不解,好好的代码怎么就不对呢?后来才找到这个方法.还有一些代码中使用了全角字符如:<,\等,也会 
    造成编译错误.