一种可配置的文件快速识别和已损坏文件智能修复的方法

文档序号:6614871阅读:232来源:国知局
专利名称:一种可配置的文件快速识别和已损坏文件智能修复的方法
技术领域
本发明涉及计算机软件领域,特别是涉及Windows操作系统下一种可配置的文件快速识别和已损坏文件智能修复的方法。
背景技术
日常进行文件打开、浏览、修改和保存等操作时,常会遇到要操作的文件没有扩展名,有扩展名但文件内容遭到破坏,没有扩展名同时内容又遭到破坏等情况。Windows操作系统下双击未知类型文件会弹出“打开方式”对话框,让用户选择安装的软件来打开未知文件。文件缺少扩展名时,若文件是自己创建的或处理过的文件时,自己可能知道文件类型, 可以通过Windows操作系统提供的“打开方式”对话框选择相应的软件打开并处理文件,如果是别人的就会因无法知道文件类型而无法对文件进行打开并处理操作。若出现文件有扩展名但文件内容遭到破坏或没有扩展名同时内容又遭到破坏的情况,在未经过特殊修复之前,Windows操作系统无法对文件进行打开和处理操作。此时我们的通常做法是丢弃并删除该文件,这样往往会导致数据完整性的破坏和数据信息的丢失,进而给企业或个人造成重大损失。
Windows操作系统长期雄踞全球操作系统霸主地位,是当今主流操作系统的代表,研究Windows操作系统文件操作机制具有很好的代表性和通用性。对没有扩展名、有扩展名但文件内容遭到破坏或没有扩展名同时内容又遭到破坏的文件进行打开和处理时, Windows操作系统没有对未知类型文件进行自动识别和对已损坏文件简单修复的功能提供完美的解决方案。要打开和操作上述文件,需要专业人士首先对文件进行专业处理,费时费力又费钱,影响与用户交互的友好性,增加了普通用户操作未知类型文件和已损坏文件的难度,给用户日常文件操作带来了很大麻烦。发明内容
本发明的目的是针对现有技术的不足,提供Windows操作系统下一种可配置的文件快速识别和已损坏文件智能修复的方法,能方便快捷地实现Windows操作系统下对未知类型文件的快速识别和对已损坏文件的智能修复。
为达到上述目的,本发明的技术方案提供一种Windows操作系统下未知类型文件快速识别和已损坏文件进行智能修复的方法,它包括以下内容
当用户选取要打开的文件后,首先判断用户要打开的文件是否有文件扩展名,如果用户选择的文件有文件扩展名,则软件遍历程序模块(注此程序模块是由专利发明人利用C#语言基于微软.NET平台开发的程序,具体实现详见后面介绍)遍历当前系统安装的所有应用软件,并根据文件扩展名和应用软件的对应关系,找到并启动对应的应用软件加载用户选择的文件内容,若加载成功就显示文件内容。若加载不成功,说明该文件有文件扩展名,但文件内容遭到破坏,文件修复程序模块(注此程序模块是由专利发明人利用C# 语言基于微软.NET平台开发的程序,具体实现详见后面介绍)启动并修复受损坏的文件,文件修复后继续利用系统安装的对应软件加载该文件,若成功,就显示文件内容,不成功继续修复,如此循环,直到满足要求为止。
当用户选取操作的文件无文件类型扩展名时,文件内容的字节流将被读取到内存,然后文件格式识别程序模块(注此程序模块是由专利发明人利用C#语言基于微软.NET平台开发的程序,具体实现详见后面介绍)访问文件格式数据库(注此文件格式数据库是专利发明人为存储文件头标识,文件格式,打开此种文件所需要的应用程序和他们之间的对应关系等数据所建立的Xml文件,具体实现详见后面介绍),通过用户操作的文件的文件头标识和数据库中文件头标识的比对得到文件的类型和打开文件所需要的应用软件。然后软件遍历程序模块遍历当前系统安装的所有应用软件,判断系统中是否安装了所需要的软件,如果没安装,则提示用户安装对应的应用软件,并自动完成给该位置文件添加类型扩展名的操作,如果安装了对应的应用软件,则根据文件格式识别程序模块识别出来的文件类型和打开该类型文件所需要的应用软件,找到并启动对应软件加载用户选择的文件内容,若加载成功则显示文件内容并接受用户操作,在用户保存该文件时自动给文件加上文件类型扩展名,以便下次进行文件操作时能快速识别文件类型。若加载不成功,文件修复程序模块启动并修复受损坏的文件,文件修复后继续识别文件类型,遍历系统软件,加载文件内容,若成功,就显示文件内容并接受用户操作,在用户保存该文件时自动给文件加上文件类型扩展名,不成功继续修复,如此循环,直到满足要求为止。
综上所述,本发明一种可配置的文件快速识别和已损坏文件智能修复的方法,该方法具体步骤如下
步骤一 Windows操作系统下用户选择要操作的文件;
步骤二 通过钩子程序获取用户选取文件的路径和文件全名,并判断该文件是否有文件类型扩展名。钩子程序的实现要调用Win32的API函数,具体过程如下
①调用int SetffindowsHookEx (int idHook, HookProcess lpfn, IntPtr hMod, int dwThreadld)安装钩子;
②调用UnHookWindowsEx (int idHook)卸载钩子;
依据用户选取文件的全路径和文件名调用Path. HasExtensionO判断文件是否有文件类型扩展名;如果有文件类型扩展名,则转步骤三。
步骤三软件遍历程序模块遍历文件系统中安装的所用应用软件,获取软件名及安装路径。其实现的具体过程为
①调用Registry. LocalMachine. OpenSubKey ()打开 Software\Microsof\ Windows\CurrentVersion\Uninstall 位置的注册表;
②通过foreach 循环遍历 Software\Microsof\Windows\Current Version\ Uninstall遍历子项名称的字符串数组;
③通过foreach循环遍历子项节点;
④再调用RegistryKey. GetValue (〃DisplayName〃,〃〃)· ToStringO 获取系统所安装的所用应用软件的名称;
⑤再调用RegistryKey. GetValue (〃DisplayIcon〃,〃〃)· ToStringO 获取系统所安装的所用应用软件的安装路径和文件名。
⑥同理通过foreach循环遍历Software\Microsof遍历子项获取是否已安装office, Sql Server, Visual Studio等其他软件及其安装路径。
步骤四根据文件扩展名和应用软件的对应关系,调用Process. Start(string fileName, string argument)找到并启动对应的应用软件加载用户选择的文件内容;其中 fiIeName 指步骤三中的 RegistryKey. GetValue ("DisplayIcon", ""). ToString O 的值, argument指步骤二中获取的用户选取文件的路径+文件全名。
步骤五判断文件是否加载成功,如果加载成功就用对应的应用软件显示并操作用户所选择的文件内容。
步骤六如果用户所选择的文件加载不成功,则通过文件修复程序模块来修复文件内容,然后继续尝试加载,如此循环,直到满足要求为止。
步骤七当步骤二调用Path. HasExtensionO判断文件无文件类型扩展名时,此时需要通过文件流的方式读取文件字节流。其实现的具体过程为;
①实例化一个文件流FileStreamunknownfs=new FileStream unknownfs(@ 文件全路径 + 文件名,FileMode. Open, FileAccess. Read);
②声明并实例化一个缓冲区byte[] unknownf sbytes=new byte [unknownfs. Length];
③通过文件流实例化一个二进制文件读取器BinaryReader unknownfsbr=new BinaryReader (unknownfs)。至此用户所选的文件的内容就被加载到了二进制文件读取器, 就可以对文件内容进行操作了。
步骤八获取用户选择的字节流后就可以用文件格式识别程序模块快速识别出其文件格式,文件格式识别程序模块是通过读取未知文件的文件头标示,并依据文件格式数据库中文件头标示和文件格式的对应关系确定文件的格式,并通过该数据库中文件格式和打开该文件所需要的应用程序之间的对应关系找到打开该文件所需要的应用程序。文件格式数据库的xml文件格式如下
权利要求
1.一种可配置的文件快速识别和已损坏文件智能修复的方法,其特征在于该方法具体步骤如下 步骤一 Windows操作系统下用户选择要操作的文件; 步骤二 通过钩子程序获取用户选取文件的路径和文件全名,并判断该文件是否有文件类型扩展名;钩子程序的实现要调用Win32的API函数,具体实现过程如下 ①调用int SetffindowsHookEx(int idHook, HookProcess lpfn,IntPtrhMod, intdwThreadld)安装钩子; ②调用UnHookWindowsEx (int idHook)卸载钩子; 依据用户选取文件的全路径和文件名调用Path. HasExtensionO判断文件是否有文件类型扩展名;如果有文件类型扩展名,则转步骤三; 步骤三软件遍历程序模块遍历文件系统中安装的所用应用软件,获取软件名及安装路径;其具体实现的过程为①调用Registry. LocalMachine. OpenSubKey ()打开 Software\Microsof\Windows\CurrentVersion\Uninstall 位置的注册表; ②通过foreach 循环遍历 Software\Microsof\ffindows\Current Version\Uninstall遍历子项名称的字符串数组; ③通过foreach循环遍历子项节点; ④再调用RegistryKey. GetValue (〃DisplayName〃,〃〃). ToStringO 获取系统所安装的所用应用软件的名称; ⑤再调用RegistryKey. GetValue (〃DisplayIcon〃,〃〃). ToStringO 获取系统所安装的所用应用软件的安装路径和文件名; ⑥同理通过foreach循环遍历Software\Microsof遍历子项获取是否已安装office,Sql Server, Visual Studio其他软件及其安装路径; 步骤四根据文件扩展名和应用软件的对应关系,调用Process. Start (stringfileName, string argument)找到并启动对应的应用软件加载用户选择的文件内容;其中fi IeName 指步骤三中的 RegistryKey. GetValue ("Di splay I con", ""). ToString ()的值,argument指步骤二中获取的用户选取文件的路径+文件全名; 步骤五判断文件是否加载成功,如果加载成功就用对应的应用软件显示并操作用户所选择的文件内容; 步骤六如果用户所选择的文件加载不成功,则通过文件修复程序模块来修复文件内容,然后继续尝试加载,如此循环,直到满足要求为止; 步骤七当步骤二调用Path. HasExtensionO判断文件无文件类型扩展名时,此时需要通过文件流的方式读取文件字节流,其具体实现的过程为; ①实例化一个文件流FileStreamunknownfs=new FileStream unknownfs (0 文件全路径 + 文件名,FileMode. Open, FileAccess. Read); ②声明并实例化一个缓冲区byte[Junknownfsbytes=newbyte[unknownfs.Length]; ③通过文件流实例化一个二进制文件读取器BinaryReaderunknownfsbr=newBinaryReader (unknownf s),至此用户所选的文件的内容就被加载到了二进制文件读取器,对文件内容就进行操作了; 步骤八获取用户选择的字节流后就用文件格式识别程序模块快速识别出其文件格式,文件格式识别程序模块是通过读取未知文件的文件头标示,并依据文件格式数据库中文件头标示和文件格式的对应关系确定文件的格式,并通过该数据库中文件格式和打开该文件所需要的应用程序之间的对应关系找到打开该文件所需要的应用程序;文件格式数据库的xml文件格式如下
全文摘要
本发明一种可配置的文件快速识别和已损坏文件智能修复的方法,该方法有十四个步骤;本方法可以依据自定义文件格式数据库实现文件的快速识别,可以多次自动、循环地尝试对已损坏文件进行智能修复,直至获得满意的结果;本方法设计的文件格式数据库可以不断的更新和修改,从而实现可配置的功能。它具有程序实现简单,功能强大,资源占用少,识别和修复效率高等优点,这为文件快速识别和已损坏文件智能修复提供了一种自动、简便、高效、可靠的解决方案,极大地提高了用户工作效率。
文档编号G06F9/445GK102981830SQ20121043336
公开日2013年3月20日 申请日期2012年11月2日 优先权日2012年11月2日
发明者闫光荣, 刘岭, 袁轲, 陶金库, 纪长刚 申请人:北京航空航天大学, 中航沈飞民用飞机有限责任公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1