发明名称 一种可配置的文件快速识别和已损坏文件智能修复的方法
摘要 本发明一种可配置的文件快速识别和已损坏文件智能修复的方法,该方法有十四个步骤;本方法可以依据自定义文件格式数据库实现文件的快速识别,可以多次自动、循环地尝试对已损坏文件进行智能修复,直至获得满意的结果;本方法设计的文件格式数据库可以不断的更新和修改,从而实现可配置的功能。它具有程序实现简单,功能强大,资源占用少,识别和修复效率高等优点,这为文件快速识别和已损坏文件智能修复提供了一种自动、简便、高效、可靠的解决方案,极大地提高了用户工作效率。
申请公布号 CN102981830B 申请公布日期 2016.02.03
申请号 CN201210433363.5 申请日期 2012.11.02
申请人 北京航空航天大学;中航沈飞民用飞机有限责任公司 发明人 闫光荣;刘岭;袁轲;陶金库;纪长刚
分类号 G06F9/44(2006.01)I;G06F9/445(2006.01)I 主分类号 G06F9/44(2006.01)I
代理机构 北京慧泉知识产权代理有限公司 11232 代理人 王顺荣;唐爱华
主权项 一种可配置的文件快速识别和已损坏文件智能修复的方法,其特征在于:该方法具体步骤如下:步骤一:Windows操作系统下用户选择要操作的文件;步骤二:通过钩子程序获取用户选取文件的路径和文件全名,并判断该文件是否有文件类型扩展名;钩子程序的实现要调用Win32的API函数,具体实现过程如下:①调用int SetWindowsHookEx(int idHook,HookProcess lpfn,IntPtr hMod,int dwThreadId)安装钩子;②调用UnHookWindowsEx(int idHook)卸载钩子;依据用户选取文件的全路径和文件名调用Path.HasExtension()判断文件是否有文件类型扩展名;如果有文件类型扩展名,则转步骤三;如果没有文件类型扩展名,则转至步骤七;步骤三:软件遍历程序模块遍历文件系统中安装的所用应用软件,获取软件名及安装路径;其具体实现的过程为:①调用Registry.LocalMachine.OpenSubKey()打开Software/Microsof/Windows/CurrentVersion/Uninstall位置的注册表;②通过foreach循环遍历Software/Microsof/Windows/Current Version/Uninstall遍历子项名称的字符串数组;③通过foreach循环遍历子项节点;④再调用RegistryKey.GetValue("DisplayName","").ToString()获取系统所安装的所用应用软件的名称;⑤再调用RegistryKey.GetValue("DisplayIcon","").ToString()获取系统所安装的所用应用软件的安装路径和文件名;⑥同理通过foreach循环遍历Software/Microsof遍历子项获取是否已安装office,Sql Server,Visual Studio其他软件及其安装路径;步骤四:根据文件扩展名和应用软件的对应关系,调用Process.Start(string fileName,string argument)找到并启动对应的应用软件加载用户选择的文件内容;其中fileName指步骤三中的RegistryKey.GetValue("DisplayIcon","").ToString()的值,argument指步骤二中获取的用户选取文件的路径+文件全名;步骤五:判断文件是否加载成功,如果加载成功就用对应的应用软件显示并操作用户所选择的文件内容,结束该方法;步骤六:如果用户所选择的文件加载不成功,则通过文件修复程序模块来修复文件内容,然后继续尝试加载,如此循环,直到满足要求为止;步骤七:当步骤二调用Path.HasExtension()判断文件无文件类型扩展名时,此时需要通过文件流的方式读取文件字节流,其具体实现的过程为;①实例化一个文件流:FileStream unknownfs=new FileStream unknownfs(@文件全路径+文件名,FileMode.Open,FileAccess.Read);②声明并实例化一个缓冲区:byte[]unknownfsbytes=new byte[unknownfs.Length];③通过文件流实例化一个二进制文件读取器:BinaryReader unknownfsbr=new BinaryReader(unknownfs),至此用户所选的文件的内容就被加载到了二进制文件读取器,对文件内容就进行操作了;步骤八:获取用户选择的字节流后就用文件格式识别程序模块快速识别出其文件格式,文件格式识别程序模块是通过读取未知文件的文件头标示,并依据文件格式数据库中文件头标示和文件格式的对应关系确定文件的格式,并通过该数据库中文件格式和打开该文件所需要的应用程序之间的对应关系找到打开该文件所需要的应用程序;文件格式数据库的xml文件格式如下:<img file="FDA0000842672900000021.GIF" wi="1473" he="280" /><img file="FDA0000842672900000031.GIF" wi="1882" he="2155" />其中文件格式数据库的xml文件格式不断的更新和修改,从而达到可配置的功能;步骤九:通过步骤八识别出未知文件类型后,软件遍历程序模块遍历文件系统中安装的所用应用软件,获取软件名及安装路径;步骤十:通过步骤九获取系统安装的应用软件,遍历系统安装的应用软件,检查是否存在能打开步骤八中识别出来的未知类型文件所要的应用软件;步骤十一:经步骤十判断,如果系统没用安装能打开步骤八中识别出来的未知类型文件所要的应用软件,则提示用户安装对应的应用软件,同时给步骤八中识别出来的未知类型文件添加文件类型扩展名,便于下次用户安装完对应的软件后能识别并打开该文件,结束该方法;步骤十二:经步骤十判断,如果系统已安装能打开步骤八中识别出来的未知类型文件所要的应用软件,则调用Process.Start(string fileName,string argument)找到并启动系统已经安装的对应应用软件加载用户选择的文件内容;步骤十三:判断步骤十二中用户选择的文件是否加载成功,若加载不成功则说明用户选择的文件无文件类型扩展名且文件内容也已损坏,此时首先用File.Copy()函数对文件进行备份,然后通过文件修复程序模块对文件内容进行修复,对文件修复后,返回步骤八读取文件字节流,继续执行步骤九及其下面的步骤,如此循环,直到满足要求为止;文件修复程序模块的实现是通过读取文件的前2个字节,并将每个字节的内容转化为16进制的字符,得到2个字符,然后将这两个字节依次与文件格式数据库中的FileMark字段中具有两个字符的所有HeadMark属性值相类比;如果有一个字符相同,则读取文件的前2个字节,并将每个字节的内容转化为16进制的字符,得到2个字符,若FileMark的EndMark属性为空,则不做处理;若FileMark的EndMark属性不为空,则将这两个字节与依次文件格式数据库中的FileMark的具有两个字符的EndMark属性相类比,如果比较结果是相似,则将该文件的前两个字符变为FileMark的HeadMark属性中的字符,变换后保存文件,并给该文件添加文件类型扩展名;如果取文件的前2个字节不符合上面的条件,则取三个字节,类比上述两个字节时的比较方法进行比较;这样取得文件的前面字节数依次增加,然后再进行对比,直到有满足条件的为止;所取的最大字节数为25个;步骤十四:经步骤十三判断,如果用户选择的文件加载成功,则利用对应的应用程序加载用户所选文件内容,并给用户选择的文件添加步骤九中识别出来的文件类型扩展名,便于下次用户进行文件操作时能快速识别并打开该文件。
地址 100191 北京市海淀区学院路37号