情况:
vs2015开发wpf程序,程序已编译,即文件已经保存,电脑突然断电,一个cs文件内容被清空,但大小与原来的一样。
解决及问题:
- 1、 网络查找“相似问题”
有很多人遇到此类问题,但,回答的人都在扯,都在说没保存的问题,什么要记得ctrl+s,这帮都是问题都看不清的自以为是的那啥。看得那疼。。。。
- 2、 使用文本文件恢复工具,找了一个叫File Repair的软件,说的好听,但没效果,另外还有其他的一些恢复工具,没有去试,我以前搞过磁盘恢复,那些挺耗时的,而且也不保证能够恢复,那些恢复软件原理就是依赖你的磁盘的某一个区域没有格式化。
【据我了解,磁盘恢复就相当于,一般的删除文件只是把指向这个文件的索引删除,但那个文件其实还在,只是系统没有索引指向它,而恢复工具,就是从磁盘上找到这块内容,重新给他加上索引】
例如:文件在磁盘上存储的是010101,一般的删除,磁盘上还是010101,所以恢复工具找到它就可以恢复,而如果被覆盖为111101 or 低格为000000,那谁都木有办法恢复了。
-
3、 鉴于上面提到的文本文件恢复工具,自己决定看下损坏文件的内容,利用16进制查看工具Hex Workshop Hex Editor查看文件内容,发现内容被全部置为0,即内容是真的清空了 —— 一开始yy想法是:要是单纯某些字节损坏,或许修改某些字节,还可能恢复。
-
4、 最终解决方案:
- 1、由于个人在开发时,习惯本地用git进行版本控制,故有一些历史记录可以用,先用最近的历史记录进行恢复,但缺失最新【未提交】的内容。
- 2、打开ILSpy工具(.net 反编译工具),找到编译过的程序,然后找到对应文件的反编译内容,在.net中,反编译的代码与原始代码一致性还是比较高的,故可以利用这一点,获得最新的一部分代码。
-
5、 仍然存在的问题:开发中,常常因为尝试步骤比较多,所以会有大量的注释代码,但这些临时注释代码并不是无用的,而反编译的代码中不会有注释代码,所以,最后获得的代码,仍然有缺失,无法找回。
故,为了以后再次遇到此类情况,及时求解:大家有啥好方法,可以恢复这些损坏的文件,拿出来一起分享下。
or 聊聊是什么机制导致断电将文件编码全置0
or 吐槽下自己遇到的类似经历
扯:奇葩史