如何保存当前程序的信息.(50分)

  • 主题发起人 主题发起人 Babyfloppy
  • 开始时间 开始时间
jobsxy: 我想那到不至于,至少ini函数还会为了和以前程序兼容而保存下来.


不过,既然有这么方便而且功能强大的注册表,为什么一定要用ini文件呢?
 
感谢各位热情的讨论.我看了以上各位的帖子感到收益非浅.
单就我目前的需要来看,我觉得eyes的"保存于数据库中"是最好的,
因为该程序要作为一个终端监视程序.
但就这个问题,大家还有什么要说的,请继续.
我在放在这一天.
/bow
 
其实, 如果是比较小型的程序, 还是使用ini好, 这样, 删除也容易(绿色软件).
而且, m$当初设计注册表, 并不是替换所有ini文件, 而是win.ini和system.ini两
个文件的. win31的win.ini/system.ini大家应该都看到过, 简直是乱七八糟, 什么
程序都往里写, 但往往删除时不去掉. 注册表稍微改善了一些, 但说实话, 制标不
制本:-(
 
cakk:另外说两句, 注册表加入二进制数据并不好, 少一些还行, 但大了就增大注册
表了, 速度会慢的.
ini只是一个统称, 其实你可以自定义格式存储设置. 实际上很多软件都是这样
的.
 
奇怪,为什么你们会觉得删除ini文件比删除注册表容易呢?

>>$当初设计注册表, 并不是替换所有ini文件, 而是win.ini和system.ini
也许,不过windows也说了,注册表是公用的,并不是仅给win.ini和system.ini
用的.

>>注册表加入二进制数据并不好
那当然,谁会把大量的二进制数据保存到那里面,我只是说明注册表的功能而已.

>>ini只是一个统称, 其实你可以自定义格式存储设置. 实际上很多软件都是
如果自定义格式就不叫ini文件了,因为tinifile的函数不能用了,只有自己写,
而且,不管是注册表还是ini文件,本意都是用来保存程序的一些基本信息的,至于
具体的数据什么的,当然还是要保存在自己的文件里,照你的推理,你还可以对我
说:"我的数据库的数据就是保存在文件里的!" --- 根本不是一码事儿了.

在我看来,ini文件唯一的优点就是反安装时可以直接删除目录就可以了,不用做
uninstall程序.这只是针对小程序而言的,看看当今有几个稍具规模的软件不往
注册表里写东西?

最后,我可以告诉你一个ini文件的bug,如果你的程序在退出前要保存一些信息
到ini文件,然后close. 那么当用户正常退出windows时,你的程序将无法保存住
信息.

 
正跟你说的一样,反安装方便哦。其实,我不用注册表,
一个原因是有时候我想改动一些程序的设置,要跑到注
册表中找老半天,觉得特费劲,自然而然就有点讨厌它。
第二个原因是我自己编的程序很小,而且希望在一台机
子上可以有多个配置,以适应不同的需求,我又不知道
到底需要多少个,这样,把配置保存在运行目录下就比
保存在注册表中方便。当然,我也不是绝对说注册表不
好,如果我的程序希望在哪个目录下都运行同一个配置,
那么,我只能写到注册表中或者写到系统目录下的INI
中。至于你说的程序退出前要保存信息到INI中的BUG,
一般来讲,如果我对配置做过改动(一般是出个FORM让
用户选择),选择完毕后我就保存INI文件。如果我在
程序退出前写注册表,能不能避免像你说的这个BUG?
难道说程序会因为要写到INI中而不执行这行命令,而
要写到注册表中就执行?
 
你没理解我的意思.
比如如果你把保存信息到ini的代码放到form.onclose事件里面执行,正常
情况下可以成功,但是如果用户没有关闭你的程序,而直接从"开始/关闭系统"
关闭windows,你的程序虽然发生了onclose事件,也执行了写ini文件的操作,
但你的修改还没来得及真正写到文件里windows就退出了.
这是windows从3.1以来就有的问题.
很多时候我们是在form的onclose里面保存信息的,比如现在这个问题:
"让程序记住退出时的状态",只有在onclose事件里面保存信息,如果写到ini
文件,就很有可能没有保存进去就退出了.

ini文件有很多毛病,当然如果你一定坚持说它好,一定要用也没有办法,
毕竟是你编程序,不是我.

 
哦,原来如此,多谢cAKK。
 
to: cAkk

> 比如如果你把保存信息到ini的代码放到form.onclose事件里面执行,正常
> 情况下可以成功,但是如果用户没有关闭你的程序,而直接从"开始/关闭系统"
> 关闭windows,你的程序虽然发生了onclose事件,也执行了写ini文件的操作,
> 但你的修改还没来得及真正写到文件里windows就退出了.

WINDOWS不会这么夸张吧,还没来得及真正写到文件里就退出了?
用《开始/关闭系统》,关闭WINDOWS不就是怕WINDOWS还有CACHE里
的东西没写到硬盘里才设的吗? 应该不至于就没写完就退出吧。

我倒是在哪里看到过,说《开始/关闭系统》这个命令时,系统不会
调用ONCLOSE事件,如果放在ONCLOSEQUERY里就OK了,即使用户直接选择
《开始/关闭系统》,也可以被执行到。

不知对否? 请赐教。
 
ONCLOSE事件是form关闭必然要发生的事件!

>>即使用户直接选择《开始/关闭系统》,也可以被执行到。
我不是说没有执行,而是执行了,但没有来得及写到文件里.
你如果不信可以试一试,在onclose事件里写ini文件,然后
"开始/关闭系统",看看是否成功.
 
这么个问题竟然写那么长,我服了!
 
把代码写在WM_QUERYENDSESSION就可以了:-)
 
cytown: 老兄,你试过吗? 现在的问题不是代码没有执行的问题,而是执行了之后
windows立即退出,没有及时保存住文件.
 
管他什么绿色软件,还是跟着M$走吧,既然他提倡注册表,
我们就用注册表吧,尽管那东西象个垃圾桶,象个破烂市。
 
用ini吧!方便
 

Similar threads

后退
顶部