关于配置文件协议制定

今天关于某些UI设置怎么保存以便下次加载时重现上次UI设置开会做了讨论(一共就3个人^-^!),我提出使用文本化协议将UI设置存储为文本协议,当下次点开UI时首先去解析设置文本,然后重现用户的设置。
没想到的是,我理由都没提出就被两人集体反对。反对理由很简单,他们想用二进制方式来存储,这样一个fread就可以将一个structure读出来,连解析都省了。
那么我就在这里陈述一下理由好了。
其实理由也很简单:
1. 因为设置不多, 就算用C来解析字符串,也费不了多大功夫,效率不是问题
2. 如果以后UI设置增加操作项,那么这个structure势必会被增加字段,那么对旧的配置文件将是灾难性的.下面举例说明:
——————————————————————————————————————-
使用二进制结构配置形式如下:
假设有这样一个结构体:

struct a {
wchar_t a[32];
int b;
}

然后在配置文件里面存了struct a aa[5];这么一个数组。乍一看,存成二进制挺好, 一下就全读出来了,不用解析效率还高。
那么假设这么一种情况,因为UI变动或其他原因,必须要在 struct a;增加一个字段int c;那么别人用旧版软件保存的设置都将作费,因为所有的变量都会依次偏掉sizeof(int)个byte.
————————————-
如果使用文本将会是如下方式:
txt文档中以 a, b n的形式存储, 以n作为一项的结尾。
如果UI变动或其他原因, 必须要加一项c, 那么只需要将每一行改为a, b, c n即可, 如果旧版软件保存的配置文件中没有c字段,那么置默认值就好,这样最起码不会说造成解析错误之类的缺陷。
另外保存为txt档,对其他编辑工具是开放的,用户设置可以手动编辑这个文档来减少UI操作,有类似脚本功能。



评论

  1. 没见过 配置文件用二进制存储

  2. @luke 其实windows下用的还是挺多的哈,只不过我不太喜欢扩展性不好的设计。

发表评论