几年前用某软件无损调整机械硬盘4k对齐时,手贱用别的软件改了盘符(因为4k对齐等待的时间太久,觉得无聊,加上以为那磁盘被占用了,反正改不动的,就改着玩),导致进程异常中断了。磁盘里大量文件损坏。猜测是文件发生了偏位。我比较在意里面的wav录音文件,也是大量损坏,个别能播放。
以前研究了没有很好的结果,只修复了一些mp3格式,最近想再研究一下那堆wav。起初我依照网上的一些经验,打开winhex 16进制编辑器,给坏文件添加或替换上了好的文件里的文件头,结果大概率带来噪音。通过随意删减,有极其小概率误打误撞能修的能听。但碰运气得来的不能用来举一反三。
继续到网上查阅wav格式的原理资料,大部分讲的是文件头的知识,没有细说播放器怎么读取的,解释不了为什么一个正常的wav文件随意删除几个字节就会变的全是噪音(做实验得知的,当时觉得这个是关键所在,解答了这个问题我才能修复)。我看的似懂非懂,很难学以致用来修复我文件。只能放弃这条“正面把原理研究透”的路。
结合之前数据位移的想法,用批量验证,得以挑出来一个特定长度的文件头,用copy /b把它和损坏文件拼接后,有大概率可以修复文件。但也有的不能成功。
(这里插入一段,两周后当我已经把所有文件已经修复的差不多了,进一步实验验证、再回头看资料才得知,存在一个读取周期,比如1024字节(对应我的那些单声道文件),或2048字节(对应双声道),只要把残缺的内容给刚好补足为周期长度的整数倍,就能修复地声音正常。这就是我当时碰撞成功的原理。另外文件头一定要和内容匹配才行,比如双声道和单声道,它们的文件头是有差异的。请看下图。)