转自http://coolshell.cn/articles/4077.html 2011-03-28 陈皓
我们知道Unix/Linux下的程序配置文件从来都是纯文本的,你可以自由地修改和查看,他们也没有什么什么XML之类的玩意(参看XML的这两篇文章:一
,二
),这个最重要的Unix文化(参看Unix传奇下篇
)40多年来就这么沿续下来了。我很佩服Microsoft的创新能力,一会儿用INI,一会儿用注册表,一会又是用XML,这就是Windows的编程中那“强大”的创新
。在网上又看到有人在争论为什么用注册表而不是纯文本,所以,写下这篇文章。
引入注册表所谓的原因
首先,让我们来看一下为什么微软觉得要使用注册表而不是ini文件,下面是一些其列出来的ini方面的毛病:
- ini文件不支持Unicode
- ini文件的安全权限不够
- ini文件在多进程下存取会有问题
- 如果一个进程锁上了这个文件,另一个进程就无法获得,只能出错。
- ini文件只能包含字符串,无法使用二进制
- 解析ini文件相对来说性能比较慢,第一次读写都需要把整个文件读入内存,然后再写回去。
- ini文件最大只有32K
- ini文件的默认目录在Windows系统目录下,只能这个目录只能Windows管理员才能访问
- ini只能包含了两层,对于多层不支持。
- 把ini文件放在中央服务器上管理很困难。
而微软说,注册表可以完美地解决这些问题。居然微软只说到了ini文件,但我觉得不单单是ini,所有的以纯文本方式保存配置文件的方法都会出现上述这样的问题。
我的观点
那么,当你在看到这些言论时,你是怎么想的?你有没有经过自己的独立思考?还是你觉得注册表完美地解决了所有的一切?下面是我的一些观点:
-
首先,我们要知道没有任何一件事是完美的,凡事必然有好的一面,也有不好的一面。
-
其次,当我们在改进一个东西时,不单单要解决其不好的东西,还要把其好的东西给传承下来。
所以,当你看到一些只说好或是只说坏的东西时,这往往意味着“宗教”或“洗脑”,这正是需要你独立思考的时候。
纯文本配置文件的好处
下面,是我觉得纯文本配置文件的好处(我用Unix下的纯文本配置文件来举例):
- 很容易进行版本管理(配置文件和程序代码一样都需要版本控制)
- 很容易移植到别的平台
- 很容易自定义文本文件的格式和语法,已也有相关的库支持(ini只支持ANSI字符,只有32K,只支持两级,那是ini的问题,解决这些问题不需要引入注册表)
- 可以在配置文本中写注释信息
- 你要很容易的使用grep,awk,sed等等以及来和脚本集成。
- 你可以很容易地拆分配置文件把其放到conf.d中,这样一来,你就非常灵活
- 你就不用整个文件都读入内存,
- 你也可以分别设置上不同的存取权限,
- 同样可以减小多个进程同时存取的问题
- 同样可以引用别的二进制配置的文件
- 你可以很容易地产生备份或是在不同的配置中来回地切换配置文件以进行调试。
- 你可以很容易地使用rsync来向中央服务器同步你的配置文件。或者使用NFS/NIS直接就把配置放在中央服务器上。
真正的原因
可见,Windows 的注册表并没有把纯文本配置文件的这些好处都带过来,所以,经过这样的独立思考,我们可以知道,微软引入注册表的真正原因是——
- 让你的程序不具移植性,让你的软件永远运行在Windows上。
- 增加你编程的复杂度和你维护配置文件的复杂度,让你在痛苦之后,苦苦哀求微软再发布下一个“创新”。
各位程序员——Windows是很危险的,你们还是回火星去吧。
转自http://coolshell.cn/articles/4077.html 2011-03-28 陈皓
分享到:
相关推荐
为实现将IE浏览器的纯文本字体修改为微软雅黑,我们可以通过修改注册表来实现。 知识点1:注册表的作用 注册表(Registry)是Windows操作系统的一种配置数据库,用于存储系统和应用程序的设置信息。在本文中,我们...
1. **二进制存储:** 注册表采用二进制格式存储数据,而非纯文本,这样不仅能够更高效地存储信息,还提高了数据的安全性。 2. **支持子键:** 注册表支持多层嵌套的键(Key),每个键都可以包含自己的子键和值,形成...
它将每3个字节的数据转换为4个Base64字符,确保数据可以在纯文本环境中安全传递。Base64解密则是将Base64编码的字符串转换回原始二进制数据的过程。在C++中,我们可以使用开源库如 OpenSSL 或自己实现Base64编码和...
通过以上详细解析,我们可以了解到,通过正确地配置注册表键值,可以有效地修复“新建文本文档”选项缺失的问题。此外,理解注册表的具体结构也有助于更好地管理系统的各种配置,避免类似问题的发生。
纯文本格式简洁明了,适合熟悉注册表结构的技术人员阅读;HTML格式则提供了更友好的界面,便于非技术人员理解和分析。报告中包含的详细信息可以帮助用户定位潜在的问题,比如冲突的注册表键值、无效的软件条目等。 ...
在Windows操作系统中,当用户右键点击一个纯文本文件(如.txt文件)并选择“打开方式”时,可能会遇到一个问题:出现两个或多个相同的应用程序选项,比如两个“记事本”。这种现象通常是由于注册表配置错误导致的,...
在早期的计算机操作系统中,Microsoft DOS(磁盘...总之,regview和ghregedit是在DOS环境下管理注册表的有力工具,它们为那些需要在纯文本模式下工作的用户提供了便利。不过,由于其潜在的风险,使用时必须小心谨慎。
注册表是Windows操作系统中的一个重要组成部分,存储了系统及应用程序的各种配置信息。在某些情况下,开发者或安全研究人员可能需要对注册表进行操作,例如为了调试、优化或修复系统问题。而将这个主题与HTML结合,...
3. 分析:导出的注册表文件(.reg)是纯文本,可以用文本编辑器查看,但为了深入分析,可能需要使用专门的注册表分析工具或编写自定义脚本来解析。 4. 法规遵从:在企业环境中,提取和使用注册表信息可能受到数据...
.txt是纯文本文件的扩展名,这种文件格式不包含任何格式化信息,只包含纯文本,可以被大多数软件打开阅读,如记事本、Word等。在Windows系统中,用户通常会通过右键菜单的"新建"选项来快速创建一个新的文本文档。 ...
纯文本搜索允许用户根据关键字查找注册表项,而正则表达式搜索则为高级用户提供了更灵活的匹配规则,可以精确匹配复杂模式。数据搜索则可以根据注册表项中的特定数据值进行查找,这对于查找与特定值相关的设置尤其...
这种限制虽然限制了其对富文本和多媒体内容的处理能力,但对于纯文本信息的整理来说,却能提供更为专注和高效的环境。 “绿化.bat”文件是软件的绿化安装脚本,用户通过运行该脚本可以快速在本地计算机上部署这款...
- **应用场景**: 创建或编辑纯文本文件。 **16. nslookup** - **描述**: DNS查找工具,用于查询域名服务器。 - **应用场景**: 测试DNS解析或查找域名对应的IP地址。 **17. sysedit** - **描述**: 系统配置编辑器,...
1. **文本编辑器**:文本编辑器是用于创建、修改和查看纯文本文件的软件,不同于富文本编辑器,它们不处理格式化元素,如字体、颜色或大小。Notepad作为一款基础文本编辑器,常用于编写代码、查看日志文件或进行简单...
在描述中提到,“为了避免误触发,有些改为了txt格式”,这意味着原始的批处理脚本可能被作者为了安全考虑转换成了纯文本文件(.txt)。这主要是因为.txt文件不具备可执行性,用户在使用前需要将它们的扩展名改为....
- **应用场景**:编写或查看纯文本文件。 ##### 11. cleanmgr - **功能描述**:磁盘清理工具。 - **应用场景**:释放硬盘空间,提高系统性能。 ##### 12. net start messenger - **功能描述**:启动“信使”服务。...
3. **说明.txt** - 这是一个纯文本文件,通常包含软件的使用指南、注意事项或者开发者提供的额外信息。用户可以通过阅读这份文档了解如何操作软件、转换文件、解决可能出现的问题等。 综上所述,“远古转换XBS影视...
3. **Readme.txt**:这是一个纯文本文件,通常提供简短的安装指南、更新信息或开发者想要传达的重要消息。它可能是安装前或安装后需要查看的重要文档。 4. **License.txt**:这是一个包含软件许可协议的文件,用户...
首先,我们需要理解的是,Word文档中的图片并不像纯文本那样直接存储在文件中,而是以对象的形式嵌入,这使得在不同程序间复制粘贴图片成为了一项挑战。为了解决这个问题,一些文本编辑器引入了第三方控件或插件,如...
notepad是Windows的标准文本编辑器,适合编写纯文本文件。尽管功能简单,但它轻巧且快速,是进行基本文本编辑的首选工具。 ### 11. cleanmgr - 磁盘清理工具 cleanmgr用于释放磁盘空间,通过删除临时文件、回收站...