今天收到一封来信:
“我的高级链路做了一部分了,而且所做的部分在做完之后已经及时保存。但是写完文档后关闭TAU G2的时候出现死机,我就强行关闭了TAU G2。以前也经常发生类似的情况,可是重新启动TAU G2是可以打开原来的U2文件的。
可是这回,我再打开U2文件后出现了错误“Error: TNR0085: XML Parser: no element found (file ://D:\贼魔2\基站项目\LLC\LLC.u2, line 40981).”,和“Information: Session in ::[wpAu0I1UtXILmZZ6zELdUAvL]: TMI0760: Failed to load file D:\贼魔2基站项目\LLC\LLC.”的情况,原来的东西打不开了,而由于我的疏忽没有备份。因为我根本没有想到会出现这种情况。
我高级链路已经做了相当多了,快完成任务了,而且老师催得又特别紧,我无法想象重新返工会是多么可怕的事情。附件已经给您一块发来,不知道您能否把这个东西恢复出来。谢谢您了。我现在非常郁闷。”
这的确够糟糕的。在此提醒大家一定要每天备份程序,最好使用CVS或SourceSafe工具进行程序管理。
下面介绍一下我是怎么修复这个文件的,当然完全的修复不可能,因为有一部分内容没有存盘,已经彻底丢失了,但总归希望能找回一些,不要彻底重做。.u2文件实际上是一种XML文件,使用UltraEdit打开就可以看出,大致是这样的格式:
在XML中,大多数Tag都是成对出现的,比如<u2></u2>、<Class></Class>等。被破坏的文件没有了后面的这些行,所以TAU G2打开时会报告错误。本来想在网上找一个自动修复XML的工具,不过还没有找到。找到了一个小工具XmlShell,它可以检查XML文件中是否存在着 Tag不封闭的情况。这个工具很小,不到1M,倒是可以帮助解决问题。首先把.u2文件改名为.xml文件,然后使用XmlShell打开,它会报告有一些Tag没有封闭。将编辑光标移动到文件尾,输入“</”。你每次输入“</”,XmlShell都会帮助你自动封闭Tag,直到出现“</u2>”,所有Tag都封闭了,这时再用XmlShell检查文档,它报告这是一个合法的XML文件了。把文件存盘,然后再改回.u2。这时再使用TAU G2打开文件,TAU G2仍然会报告一些错误,但是这是在Model中已经可以看到一些东西了。至于能找回来多少,要看运气。
类似的工具还有不少,如XML Spy或XmLBuddy。
这篇文章快要写完的时候收到了回信:“我刚才看了文件,已经恢复了90%,就差2张图和一些函数定义。我昨天做的东西也有一部分恢复出来了。估计再有半天就可以补齐。如果没有您,我估计重新返工得1个月左右的时间。”很有成就感。