金庆的专栏

  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  423 随笔 :: 0 文章 :: 454 评论 :: 0 Trackbacks
自从用上CodeGuru的CIniFile类以后,ini配置文件成为我的跨平台通用方法。

ini文件不仅用来保存程序启动时的配置项,也用来保存程序退出时的状态。
后来又发展到随时读取ini的最新配置,随时保存程序的运行状态。

不过一直有个问题,就是写ini文件时断电的后果。
前几天终于遇上了,断电后发现配置文件正好被清空了。
结果程序因为缺乏必要的配置,根本无法运行。

使用Windows的WritePrivateProfile函数是否也有这样问题?很难确认。

保险的办法是,ini文件只用作只读的配置,信息保存另外处理。

posted on 2008-01-29 12:16 金庆 阅读(2462) 评论(8)  编辑 收藏 引用 所属分类: 1. C/C++

评论

# re: 滥用ini配置文件造成崩溃 2008-01-29 12:59 eXile
我的做法是为配置设定默认值,如果读写失败,就取默认值。  回复  更多评论
  

# re: 滥用ini配置文件造成崩溃 2008-01-29 13:23 lunny
先写到临时文件,写成功后再覆盖拷贝,拷贝成功再删除临时文件  回复  更多评论
  

# re: 滥用ini配置文件造成崩溃[未登录] 2008-01-29 14:45 cppexplore
为啥就不用内存数据库呢  回复  更多评论
  

# re: 滥用ini配置文件造成崩溃[未登录] 2008-01-29 16:29 汪江涛
给你的ini文件加上版本和有效性结束标志。
写的时候新建一个文件,增加版本号,写完后结尾加有效性标志,然后删除低版本文件。如果发现有两个ini文件,则取高版本,看结尾有无有效性标志,如果有就读取,否则回去取低版本,并删除高版本。  回复  更多评论
  

# re: 滥用ini配置文件造成崩溃 2008-01-30 10:43 Enoch
赞同eXile的说法,一般都有默认配置。  回复  更多评论
  

# re: 滥用ini配置文件造成崩溃 2008-01-30 22:17 agaric
這個是文件系統造成的, 你應用程序考慮這么多,會很累。
用默認數據之類的,就ok  回复  更多评论
  

# re: 滥用ini配置文件造成崩溃 2008-01-31 10:17 金庆
@agaric
我也怀疑是文件系统有问题,不然断电正好断在打开文件这个点上概率几乎为0,虽然还是有可能。搞个版本号加有效标记确实太累。默认值是有的,但实际值与默认值不同。(不然要配置干嘛?)  回复  更多评论
  

# re: 滥用ini配置文件造成崩溃 2008-03-06 14:46 Huanggang
我也遇到同样的问题,搞了n久才搞定。跟上面lunny 的方法差不多。

1.在打开配置文件写之前,将配置文件拷贝一份为临时文件。
在程序中可以系统调用,如:system("cp 1.ini 1.tmp");

2.打开配置文件进行写。
如果此时刚好在这一瞬间断电,下面第3条就不会执行,
配置文件会被清空,但还有临时文件。

3.写完后close文件,此时证明文件操作已成功,可以删除临时文件了。
如:system("rm -f 1.tmp");

4.在应用系统启动之前判断是否存在临时文件。
若存在就证明上一次对配置文件操作失败(被清空),拷贝一份临时文件为配置文件:
如:在脚本文件中 先rm -f 1.ini 然后cp 1.tmp 1.ini 注意:1.ini虽然被清空但还存在,所有要先rm掉,否则直接cp不会成功。

若不存在就证明上一次对配置文件操作成功,不做任何处理。  回复  更多评论
  


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理