notepad++源码读取(1)--序列化

        今天看了一下notepad++的源码,本来想用vs来反向工程生成uml图,但发现得到的是一点多兆的空白文件,无语死。。这样就不能从结构上看notepad++了,只好从winmain.cpp开始查看咯。

       winmain函数里,前期都是变量的设置,解析,然后就是一个大大的try……catch,里面包含着一个消息队列的循环。然后。。然后就没然后了,对这个不感什么兴趣就扔了。PS:主框架文件为三个大大的switch……case的NppBigSwitch.cpp文件,Notepad_plus跟Parameters是notepad++里最核心的东西,弄懂了这三个,这软件怎么样的应该都明白了。

     “最近打开文件”和“保存会话”这两个功能不是很难,也不会很无聊,从此入手。这两个功能一看就知道是要将信息存储在本地,它们存放在C:\Users\Administrator\AppData\Roaming\Notepad++文件内,一个为config.xml尾部的history标签下,一个为session.xml。(找了半天。。。)

notepad++源码读取(1)--序列化_第1张图片

notepad++源码读取(1)--序列化_第2张图片

history的结构比较简单,主要是最近打开的文件名,而session.xml则是记录了最后关闭会话时工作的是第几个子窗口(记住账号用这种格式也可以,记录着最后一个登陆的账号),从0开始算,子标签记录关键的是文件的语言,编码,路径。

文件格式找到了,那么notepad++是通过什么读写的呢?答案是TinyXML,小巧的开源的xml解释器。等晚点再研究其源码。notepad++的文件读写都是通过NppIO.cpp文件(没有头文件,我猜想notepad++(下面简写为npp)没有对应头文件的cpp都是Notepad_plus.h是实现文件),主要用途是打开关闭文件的读写,配置文件的读写。而配置文件的读写就是用TinyXML的,其他文件是用vs内部的东西吧(没看~)。

“最近打开文件”是主要文件是lastRecentFileList,使用一个结构体来存储文件信息,而这又用队列来存储。

lastRecentFileList类的主要成员(次要信息已删除),经过精简后的lastRecentFileList类就是对队列增删查的类再加上序列化和操纵菜单。“最近打开文件”这个功能就是在程序初反序列化到_lrfl中,结束后再重新写入文件内,本来以为是很复杂的,至少是用id来标示,修改也是修改id,而不是整个修改,没想到。。受打击了。。

而保存会话也是同样的做法,不过更加简单,只用两个接口。

 
   

转载于:https://www.cnblogs.com/yedezhanghao/archive/2012/08/18/2645930.html

你可能感兴趣的:(notepad++源码读取(1)--序列化)