CN114281257A - 一种光盘文件的快速预览方法、计算设备及存储介质 - Google Patents
一种光盘文件的快速预览方法、计算设备及存储介质 Download PDFInfo
- Publication number
- CN114281257A CN114281257A CN202111579218.3A CN202111579218A CN114281257A CN 114281257 A CN114281257 A CN 114281257A CN 202111579218 A CN202111579218 A CN 202111579218A CN 114281257 A CN114281257 A CN 114281257A
- Authority
- CN
- China
- Prior art keywords
- file
- metadata
- optical disc
- information
- data block
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 230000003287 optical effect Effects 0.000 title claims abstract description 101
- 238000000034 method Methods 0.000 title claims abstract description 84
- 238000013500 data storage Methods 0.000 claims abstract description 36
- 238000012795 verification Methods 0.000 claims abstract description 9
- 238000012545 processing Methods 0.000 claims description 14
- 230000009191 jumping Effects 0.000 claims description 7
- 238000004806 packaging method and process Methods 0.000 claims description 2
- 238000004891 communication Methods 0.000 description 17
- 230000006870 function Effects 0.000 description 17
- 238000010586 diagram Methods 0.000 description 8
- 230000008569 process Effects 0.000 description 7
- 230000008901 benefit Effects 0.000 description 6
- 230000008520 organization Effects 0.000 description 3
- 230000002093 peripheral effect Effects 0.000 description 3
- 230000003993 interaction Effects 0.000 description 2
- 230000007723 transport mechanism Effects 0.000 description 2
- 230000007547 defect Effects 0.000 description 1
- 230000007812 deficiency Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000007667 floating Methods 0.000 description 1
- 230000002452 interceptive effect Effects 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000004044 response Effects 0.000 description 1
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种光盘文件的快速预览方法、计算设备及存储介质,光盘文件的快速预览方法在计算设备中执行,该方法包括:响应于用户对光盘文件的快速预览请求,获取光盘信息,光盘信息包括光驱设备的名称、光盘路径和文件列表;对光驱设备的名称所指示的文件系统进行验证;若验证通过,则对文件系统进行解析,以定位到数据存储区域;从数据存储区域中确定出元数据及其描述信息;解析元数据及其描述信息,以生成文件信息,并将文件信息写入文件列表;输出文件列表。
Description
技术领域
本发明涉及计算机技术领域,具体涉及一种光盘文件的快速预览方法、计算设备及存储介质。
背景技术
光盘的数据存储需要有一个文件系统,常用的光盘文件系统有ISO 9660(International Organization for Standardization 9660,国际标准化组织(ISO)定义的光盘文件系统)和UDF(Universal Disk Format,通用碟片格式,一种由光学存储技术协会组织制定的文件规格)文件系统。由于ISO 9660文件系统具有很多缺陷,例如不支持刻录4G以上的单个文件、文件属性支持较少等等,因此面向光盘数据存储的UDF文件系统被发明出来了,相对于ISO9660文件系统,它有以下主要优势:
最大支持2TB的存储介质(对于光盘远远足够);
支持闪存媒体、Iomega REV光盘和CD-MRW光盘;
小于2KB的文件存储在文件输入块(File Entry block)中;
最大支持2TB的单文件存储,文件名可以达到255个字符;
支持丰富的文件属性,适合各种操作系统;
支持桥接(bridge format)格式,ISO 9660、Joliet和UDF格式都驻留在同一光盘上。这在视频应用中使用,如DVD-Video、DVD+VR和DVD-VR;
支持命名流(named streams)和"实时“(Real-Time)文件。
这些优势让UDF文件系统逐渐替代了ISO9660文件系统,使得光盘的数据存储有了更多的应用场景。但是由于光盘是一种速度很慢的存储介质,并且在Linux发行版的操作系统上,用户要读取光盘中的文件内容需要通过内核挂载光盘介质,然后解析光盘的所有元数据后,用户才能查看到光盘中有哪些文件内容,这个过程非常耗时。因此,基于最常见的光盘的UDF文件系统,提升读取用户最关心的光盘文件内容的性能是非常必要的。
在当前的主流操作系统中,均没有对UDF光盘进行快速预览的功能实现,现有技术如果需要查看UDF光盘的文件内容均需要复杂的流程。
发明内容
鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的一种光盘文件的快速预览方法、计算设备以及存储介质。
根据本发明的一个方面,提供一种光盘文件的快速预览方法,在计算设备中执行,该方法包括:响应于用户对光盘文件的快速预览请求,获取光盘信息,光盘信息包括光驱设备的名称、光盘路径和文件列表;对光驱设备的名称所指示的文件系统进行验证;若验证通过,则对文件系统进行解析,以定位到数据存储区域;从数据存储区域中确定出元数据及其描述信息;解析元数据及其描述信息,以生成文件信息,并将文件信息写入文件列表;输出文件列表。
可选地,在根据本发明的光盘文件的快速预览方法中,其中,对光驱设备的名称所指示的文件系统进行验证的步骤包括:至少基于光盘的设备描述符,获取最后一个节点的开始位置和结束位置;从开始位置起,跳转第一字节长度,将跳转到的位置作为第一起始点;自第一起始点起,依序读取多个数据块,以确定数据块的内容是否符合预设条件;若符合预设条件,则自开始位置跳转第二字节长度,将跳转到的位置作为第二起始点;自第二起始点起,读取一个数据块;对所读取的数据块进行处理,以判定该数据块中是否包含表示查询卷描述符关键指针的预设字符;若包含预设字符,则基于结束位置,确定第三起始点;自第三起始点起,读取一个数据块,并对所读取的数据块进行处理,以判定该数据块是否包含所述预设字符;若数据块包含预设字符,则确定光驱设备的名称所指示的文件系统验证通过。
可选地,在根据本发明的光盘文件的快速预览方法中,其中,自第一起始点起,依序读取多个数据块,以确定数据块的内容是否符合预设条件的步骤包括:自第一起始点起,读取一个数据块,并检查所读取的数据块的内容是否符合第一条件;若符合第一条件,则继续读取下一个数据块,并检查所读取的数据块的内容是否符合第二条件;若符合第二条件,则继续读取下一个数据块,并检查所读取的数据块的内容是否符合第三条件。
可选地,在根据本发明的光盘文件的快速预览方法中,其中,对文件系统进行解析,以定位到数据存储区域的步骤包括:基于预设字符所表示的表示查询卷描述符关键指针的,确定元数据区域的开始位置和长度;基于长度,确定元数据块的数量;基于开始位置,遍历元数据块,以确定出包含关键元数据的元数据块;对所确定的元数据块进行处理,以确定出数据存储区域的位置。
可选地,在根据本发明的光盘文件的快速预览方法中,其中,对所确定的元数据块进行处理的步骤包括:将所确定的元数据块转换为预设对象。
可选地,在根据本发明的光盘文件的快速预览方法中,其中,从数据存储区域中确定出元数据及其描述信息的步骤包括:从数据存储区域中读取第一个数据块,作为根元数据,并将其转换为结构体对象;解析结构体对象,以获取根元数据的描述信息;将数据存储区域中除根元数据的非根元数据,确定为有效元数据;根据确定出的有效元数据,确定有效元数据的描述信息。
可选地,在根据本发明的光盘文件的快速预览方法中,其中,解析元数据及其描述信息,以生成文件信息的步骤包括:判断所确定的元数据及其描述信息,是否为根元数据及其描述信息;若不是,则分别从描述信息和元数据中获取文件名和文件属性;读取与其相邻的下一个数据块中的元数据及其描述信息,重复获取文件名和文件属性的步骤,直到遍历完数据存储区域;基于文件名和文件属性,生成文件信息,其中,文件的属性包括:文件类型、用户标识、用户组标识、文件权限。
可选地,在根据本发明的光盘文件的快速预览方法中,其中,判断所确定的元数据及其描述信息,是否为根元数据及其描述信息的步骤包括:判断描述信息是否符合第四条件;若是,则描述信息对应的元数据为根元数据。
可选地,在根据本发明的光盘文件的快速预览方法中,其中,计算设备中驻留有展示应用,计算设备中所述输出文件列表的步骤包括:将文件列表封装为结构体对象,并将其发送至所述展示应用;通过展示应用解析结构体对象,输出预览信息,并将预览信息呈现给用户。
可选地,在根据本发明的光盘文件的快速预览方法中,将结构体对象进行存储。
可选地,在根据本发明的光盘文件的快速预览方法中,其中,每一数据块包括2048字节,第一字节长度为16*2048字节,第二字节长度为(16+256)*2048字节。
可选地,在根据本发明的光盘文件的快速预览方法中,其中,对所读取的数据块进行处理,以判定该数据块中是否包含预设字符的步骤包括:将数据块的二进制数据转换为结构体标签;获取结构体标签中的识别字符,并判定该识别字符是否为预设字符。
根据本发明的又一个方面,提供一种计算设备,包括:至少一个处理器;和存储有程序指令的存储器,其中,所述程序指令被配置为适于由所述至少一个处理器执行,所述程序指令包括用于执行上述方法的指令。
根据本发明的又一个方面,提供一种存储有程序指令的可读存储介质,当所述程序指令被计算设备读取并执行时,使得所述计算设备执行上述的方法。
根据本发明的方案,通过对文件系统进行解析,直接定位到数据存储区域,并从数据存储区域中确定出元数据及其描述信息,解析元数据及其描述信息,得到文件信息,并将得到的文件信息写入至文件列表。实现了绕开内核态中的文件系统与挂载机制,直接在用户态解析UDF文件系统光盘中文件关键信息,改善文件管理器启动性能,无须等待光驱挂载,直接查看光盘信息,提升用户交互感受。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1示出了现有技术中一种实现查看UDF光盘文件的流程示意图;
图2示出了现有技术中另一种实现查看UDF光盘文件的流程示意图;
图3示出了根据本发明一个实施例的计算设备300的结构图;
图4示出了根据本发明一个实施例的光盘文件的快速预览方法400的流程图;
图5示出了根据本发明一个实施例的光盘文件的快速预览方法的人机交互图;
图6示出了根据本发明一个实施例的光盘中的数据存储结构示意图;
图7示出了根据本发明一个实施例提供的文件系统的验证方法流程示意图;
图8示出了根据本发明一个实施例提供的文件系统的确定根元数据及其描述信息的方法流程示意图;
图9示出了根据本发明一个实施例提供的文件系统的生成文件信息的方法流程示意图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
如图1所示,图1示出了现有技术中一种实现查看UDF光盘文件的流程示意图。在Linux的发行版查看UDF光盘的文件内容,最主流的做法是通过内核挂载光盘到Linux文件系统,由Linux内核中的UDF文件系统模块解析光盘文件内容,当用户插入UDF光盘后,需要内核态和用户态的诸多流程反复交叉才能达到用户预览UDF中文件的目的。
该方案存在以下问题:
1.光盘首先需要被内核挂载,需要耗时,并且需要用户提供权限;
2.UDF光盘解析需要通过内核解析,应用层软件无法控制解析的方式,后期增加新的特性时会被限制;
3.UDF光盘会被内核解析出所有数据,但很多数据是用户不关心的,因此针对快速预览的功能浪费了太多时间。
4.涉及诸多进程间通信、权限操作,非常耗时。
另外,为改善上述方案中的不足,现有技术中提供了一种如图2所示的方案,图2示出了现有技术中另一种实现查看UDF光盘文件的流程示意图。图2示出的方案中,通过使用用户态文件系统FUSE实现UDF文件系统的解析,可以自定义一个UDF文件系统解析的代码在用户态的fuse driver实现。由于UDF文件系统解析的代码是自行编写的,就可以简化文件系统的解析流程,只解析用户关注的关键信息反馈给用户。
但是在该方案中,虽然使用FUSE几乎不需要内核的参与(访问VFS接口仍需要进入内核态),绕过一些权限操作,并且可以自主控制UDF文件系统的解析方法(可以自定义如何解析UDF元数据),但是FUSE的文件读写性能却远远低于内核中的UDF文件系统(大概低30%-40%左右)。如果文件读写性能低下,那么快速预览UDF光盘文件的效果是无法实现的。
为解决上述现有技术中存在的问题,提出本发明的方案。本发明的一个实施例提供了一种光盘文件的快速预览方法,该方法可以在计算设备中执行。
为方便描述和理解,对本方面中出现的符号及术语进行如下解释与说明:
图3示出了根据本发明一个实施例的计算设备300的结构图。如图3所示,在基本的配置302中,计算设备300典型地包括系统存储器306和一个或者多个处理器304。存储器总线308可以用于在处理器304和系统存储器306之间的通信。
取决于期望的配置,处理器304可以是任何类型的处理,包括但不限于:微处理器(μP)、微控制器(μC)、数字信息处理器(DSP)或者它们的任何组合。处理器304可以包括诸如一级高速缓存310和二级高速缓存312之类的一个或者多个级别的高速缓存、处理器核心314和寄存器316。示例的处理器核心314可以包括运算逻辑单元(ALU)、浮点数单元(FPU)、数字信号处理核心(DSP核心)或者它们的任何组合。示例的存储器控制器318可以与处理器304一起使用,或者在一些实现中,存储器控制器318可以是处理器304的一个内部部分。
取决于期望的配置,系统存储器306可以是任意类型的存储器,包括但不限于:易失性存储器(诸如RAM)、非易失性存储器(诸如ROM、闪存等)或者它们的任何组合。计算设备中的物理内存通常指的是易失性存储器RAM,磁盘中的数据需要加载至物理内存中才能够被处理器304读取。系统存储器306可以包括操作系统320、一个或者多个应用322以及程序数据324。应用322实际上是多条程序指令,其用于指示处理器304执行相应的操作。在一些实施方式中,在一些实施方式中,应用322可以布置为在操作系统上由一个或多个处理器304利用程序数据324执行指令。操作系统320例如可以是Linux、Windows等,其包括用于处理基本系统服务以及执行依赖于硬件的任务的程序指令。应用322包括用于实现各种用户期望的功能的程序指令,应用322例如可以是浏览器、即时通讯软件、软件开发工具(例如集成开发环境IDE、编译器等)等,但不限于此。当应用322被安装到计算设备300中时,可以向操作系统320添加驱动模块。
在计算设备300启动运行时,处理器304会从存储器306中读取操作系统320的程序指令并执行。应用322运行在操作系统320之上,利用操作系统320以及底层硬件提供的接口来实现各种用户期望的功能。当用户启动应用322时,应用322会加载至存储器306中,处理器304从存储器306中读取并执行应用322的程序指令。
计算设备300还包括储存设备332,储存设备332包括可移除储存器336和不可移除储存器338,可移除储存器336和不可移除储存器338均与储存接口总线334连接。
计算设备300还可以包括有助于从各种接口设备(例如,输出设备342、外设接口344和通信设备346)到基本配置302经由总线/接口控制器330的通信的接口总线340。示例的输出设备342包括图形处理单元348和音频处理单元350。它们可以被配置为有助于经由一个或者多个A/V端口352与诸如显示器或者扬声器之类的各种外部设备进行通信。示例外设接口344可以包括串行接口控制器354和并行接口控制器356,它们可以被配置为有助于经由一个或者多个I/O端口358和诸如输入设备(例如,键盘、鼠标、笔、语音输入设备、触摸输入设备)或者其他外设(例如打印机、扫描仪等)之类的外部设备进行通信。示例的通信设备346可以包括网络控制器360,其可以被布置为便于经由一个或者多个通信端口364与一个或者多个其他计算设备362通过网络通信链路的通信。
网络通信链路可以是通信介质的一个示例。通信介质通常可以体现为在诸如载波或者其他传输机制之类的调制数据信号中的计算机可读指令、数据结构、程序模块,并且可以包括任何信息递送介质。“调制数据信号”可以这样的信号,它的数据集中的一个或者多个或者它的改变可以在信号中编码信息的方式进行。作为非限制性的示例,通信介质可以包括诸如有线网络或者专线网络之类的有线介质,以及诸如声音、射频(RF)、微波、红外(IR)或者其它无线介质在内的各种无线介质。这里使用的术语计算机可读介质可以包括存储介质和通信介质二者。
计算设备300还包括与总线/接口控制器330相连的储存接口总线334。储存接口总线334与储存设备332相连,储存设备332适于进行数据存储。示例的储存设备332可以包括可移除储存器336(例如CD、DVD、U盘、可移动硬盘等)和不可移除储存器338(例如硬盘驱动器HDD等)。
在根据本发明的计算设备300中,应用322包括执行方法400的多条程序指令。
图4示出了根据本发明一个实施例的光盘文件的快速预览方法400的流程图。方法400适于在计算设备(例如前述计算设备300)中执行。
如图4所示,方法400的目的是实现一种光盘文件的快速预览方法,始于步骤S402,在步骤S402中,响应于用户对光盘文件的快速预览请求,获取光盘信息,光盘信息包括光驱设备的名称、光盘路径和文件列表。
在一个具体示例中,如图5所示,图5示出了根据本发明一个实施例的光盘文件的快速预览方法的人机交互图。在本发明中,实现快速预览UDF光盘文件快速预览需求的核心模块在于提供一种高效的UDF文件系统的解析方式,这个核心模块以动态链接库的形式提供,命名为libquickudf.so。在核心模块libquickudf.so之上的是类似于文件管理器(dde-file-manager)一类的上层应用程序,负责与用户的UI交互逻辑,然后应用程序加载、调用libquickudf.so,所有流程均在用户态工作,libquickudf.so动态链接库被上层应用程序载入后,即可开始工作:
1.用户在应用程序dde-file-manager对光驱图标按空白按键(或其他快捷键等方式)发起快速预览UDF光盘的请求;
2.应用程序dde-file-manager调用libquickudf.so内部的quickudf_parse函数,该函数接收三个参数:
a)输入参数dev,char*类型,表示光驱设备的名称;
b)输入参数path,char*类型,表示待解析的UDF光盘路径;
c)输出参数file_list,自定义结构体udf_files_t类型,为应用程序返回UDF光盘中指定路径的文件列表。
函数quickudf_parse的返回值类型为int,正确工作时返回0,异常工作时返回非0值。
在步骤S404中,对光驱设备的名称所指示的文件系统进行验证。具体包括以下步骤:
S4041、至少基于光盘的设备描述符,获取最后一个节点的开始位置和结束位置。
在一个具体示例中,如图6所示,图6示出了根据本发明一个实施例的光盘中的数据存储结构示意图。每一次的刻录在光盘中是以一个节点(session,也称数据块)的方式存在,session中保存着光盘的目录信息、文件信息,以及包含“指针”指向之前刻录的文件的信息,通过将其以例如UDF或ISO9660的文件系统组织起来,达到可以在操作系统中被挂载识别的目的。每一个session中都应具备一个完整的文件系统数据结构,包含文件系统的关键描述字符、文件系统的目录以及用于解析文件系统的关键指针入口,通过关键指针入口可以将文件系统中的所有数据逐次解析出来。所有的数据以数据块的方式存储(如图6所示的小方格),在光盘中,每个块的大小为2048字节。
在一个可能实现的方式中,可通过调用UDF的检查函数isValidUDF()来获取最后一个节点,具体地,首先,在函数isValidUDF()中传入光盘的设备描述符fd。之后,函数isValidUDF()调用系统调用函数ioctl,传入参数fd和宏参数CDROMMULTISESSION,获取最后一个session开始的位置,该位置命名为start,同时可以获取到最后一个session结束的位置,该位置命名为last。
S4042、从开始位置起,跳转第一字节长度,将跳转到的位置作为第一起始点。具体地,第一字节长度为16*2048。即,从上述开始位置(即start位置)跳转16个块长度,其中,每个块大小为2048字节。另外,可以将跳转到的第一起始点标记start1。
S4043、自第一起始点起,依序读取多个数据块,以确定数据块的内容是否符合预设条件。
在一个可能实现的方式中,自第一起始点起,读取一个数据块,并检查所读取的数据块的内容是否符合第一条件。其中,其第一条件为检查读取的内容是否为“BEA01”开头。
若符合第一条件,则继续读取下一个数据块,并检查所读取的数据块的内容是否符合第二条件。其中,第二条件为检查读取的内容是否为“NSR02”或“NSR03”。
若符合第二条件,则继续读取下一个数据块,并检查所读取的数据块的内容是否符合第三条件。其中,第三条件为检查读取的内容是否为“TEA01”。
示例性地,从上述start1处读取一个块,检查读取的内容是否为“BEA01”开头,如果不是,说明UDF文件系统不正确,则返回错误。继续再读取一个块,检查读取的内容是否为“NSR02”或“NSR03”,如果不是,则返回错误。继续再读取一个块,检查读取的内容是否为“TEA01”,如果不是,则返回错误,结束流程。
S4044、若符合预设条件,则自开始位置跳转第二字节长度,将跳转到的位置作为第二起始点。第二字节长度为(16+256)*2048。可以将跳转到的第二起始点start2。
S4045、自第二起始点起,读取一个数据块。
S4046、对所读取的数据块进行处理,以判定该数据块中是否包含表示查询卷描述符关键指针(AVDP)的预设字符。具体地,将数据块的二进制数据转换为结构体标签;获取结构体标签中的识别字符,并判定该识别字符是否为预设字符。在本实施例中,预设字符为AVDP中的tagIdent的值。
示例性地,将该数据块的二进制数据转换为结构体tag,获取结构体中tagIdent的值,检查值是否为TAG_IDENT_AVDP(0x002),如果不是则返回错误,结束流程。结构体tag的定义如下:
S4047、若包含预设字符,则基于结束位置,确定第三起始点。第三起始点start3为上述获取到的最后一个session结束的位置的前一个块,即last-1处。
S4048、自第三起始点起,读取一个数据块,并对所读取的数据块进行处理,以判定该数据块是否包含所述预设字符。预设字符的判定与步骤S4047一样,在此,不再赘述。
S4049、若所述数据块包含预设字符,则确定光驱设备的名称所指示的文件系统验证通过。上述流程全部正常,则表明文件系统是一个正确的UDF文件系统。
在一个具体示例中,结合图7,图7示出了根据本发明一个实施例提供的文件系统的验证方法流程示意图。该文件系统的验证方法包括以下步骤:
1、调用UDF的检查函数isValidUDF(),传入光盘的设备描述符fd;
2、isValidUDF()中调用系统调用函数ioctl,传入参数fd和宏参数CDROMMULTISESSION,获取最后一个session开始的位置,该位置命名为start,同时可以获取到最后一个session结束的位置,该位置命名为last;
3、从位置start跳转16个块,每个块大小为2048字节,此时start=start+16*2048;
4、从start读取一个块,检查读取的内容是否为“BEA01”开头,如果不是,则返回错误,结束流程;
5、继续从start再读取一个块,检查读取的内容是否为“NSR02”或“NSR03”,如果不是,则返回错误,结束流程;
6、继续从start再读取一个块,检查读取的内容是否为“TEA01”,如果不是,则返回错误,结束流程;
7、开始检查AVDP是否存在,start的值跳转到start=start+16块+256块的位置,然后读取一个块,将块的二进制数据转换为结构体tag,获取结构体中tagIdent的值,检查值是否为TAG_IDENT_AVDP(0x002),如果不是则返回错误,结束流程。结构体tag的定义如下:
8、将start的值更新为start=last-1,继续检查第二个AVDP是否存在,检测的方法依然同上述,检查tag结构体中tagIdent的值是否为TAG_IDENT_AVDP(0x002),如果不是则返回错误,结束流程;
9、上述流程全部正常,则表明文件系统是一个正确的UDF文件系统,程序可以进行到下一步,否则程序结束。
在步骤S406中,若文件系统验证通过,则对文件系统进行解析,以定位到数据存储区域(PSPACE)。数据存储区域即UDF文件系统中存储文件内容的区域。
在一些可能实现的方式中,首先,基于预设字符所表示的查询卷描述符关键指针,确定元数据区域的开始位置和长度。具体可以通过将上述获取到的查询卷描述符关键指针(AVDP)转换为结构体以下结构体:
转换后的结构体命名为anchorVolDescPtr,从该结构体anchorVolDescPtr中读取mainVolDescSeqExt值,该值记录着VDS(Volume Descriptor Sequence,卷描述符序列码)区域所在的开始位置和长度,关键元数据PD就位于VDS中。元数据(Metadata),又称中介数据、中继数据,为描述数据的数据(data about data),主要是描述数据属性(property)的信息,用来支持如指示存储位置、历史数据、资源查找、文件记录等功能。
然后,基于长度,确定元数据块的数量。通过公式长度/2048(块大小),可以计算出VDS区域内的元数据块的数量。
之后,基于开始位置,遍历元数据块,以确定出包含关键元数据的元数据块。遍历确定的所有元数据块,每次读取一个块,将块转换为和上文相同的tag结构体对象,获取结构体对象中的值tagIdent,检查值是否为TAG_IDENT_PD(0x0005),如果是,说明该元数据块包含有关键元数据。如果不是,则继续读取下一个块。
最后,对所确定的元数据块进行处理,以确定出数据存储区域的位置。优先地,将所确定的元数据块转换为预设对象(partitionDesc)。预设对象partitionDesc定义如下:
从中获取值partitionStartingLocation,该值记录着光盘数据存储区域(PSPACE)的位置。
继续上述示例,结合图8,图8示出了根据本发明一个实施例提供的文件系统的定位数据存储区域的方法流程示意图。该定位数据存储区域的方法具体如下:
1、从AVDP(其结构体名为anchorVolDescPtr)中读取mainVolDescSeqExt,该值记录着VDS区域所在的开始位置和长度,关键元数据PD就位于VDS中;
2、从mainVolDescSeqExt获取VDS的位置location和长度length;
3、通过长度length/2048(块大小),计算出VDS中的元数据数量count
4、遍历所有块,每次读取一个块,将块转换为和上文相同的tag结构体对象,获取结构体对象中的值tagIdent,检查值是否为TAG_IDENT_PD(0x0005),如果不是则继续读取下一个块;
5、将块转换为结构体对象partitionDesc,获取值partitionStartingLocation,该值记录着光盘数据存储区域(PSPACE)的位置,结构体partitionDesc定义如下:
在步骤S408中,从数据存储区域中确定出元数据及其描述信息。
需要说明的是,元数据包括根元数据(root FE)和普通(有效)元数据(FE),相应的root FE具有根元数据描述信息root FID,普通元数据FE具有元数据描述信息FID。但是,root FE和root FID中并不会记录用户刻录的文件信息,真正的记录用户文件信息的为元数据FE和FID。
基于此,在一些实施例中,步骤S408包括以下子步骤:
S4081,从数据存储区域中读取第一个数据块,作为根元数据,并将其转换为结构体对象。root FE位于数据存储区域(PSPACE)的第一个数据块。
S4082,解析结构体对象,以获取根元数据的描述信息。
在一个具体示例中,结合图8,图8示出了根据本发明一个实施例提供的文件系统的确定根元数据及其描述信息的方法流程示意图。具体地:
1、通过上文结构体partitionDesc中获取的partitionStartingLocation为起始位置,读取一个块(2048字节),将其转化为Root FE的结构体对象,该结构体定义如下:
解析Root FE对象,获取它的值icbTag中的flags参数,判断是否等为ICBTAG_FLAG_AD_IN_ICB;
2、当flags为ICBTAG_FLAG_AD_IN_ICB时,可以确认Root FID对象大小为Root FE中的值lengthAllocDescs,根据该大小为Root FID对象分配空间,Root FID对象的内容为Root FE中的值extendedAttrAndAllocDescs;
3、当flags的值不为ICBTAG_FLAG_AD_IN_ICB时,可以确认Root FID对象大小为Root FE中值informationLength,根据该大小为Root FID对象分配空间;
4、将Root FE中的extendedAttrAndAllocDescs转换为结构体short_ad的对象,解析该对象,可以获得Root FID的位置pos和长度len,short_ad的结构体定义如下:
5、根据解析出的Root FID的位置pos作为起始位置,从光盘读取len字节的数据写入到Root FID的对象中,完成Root FID的读取,Root FID对象的结构体定义如下:
S4083,将数据存储区域中除所述根元数据的非根元数据,确定为有效元数据。优选地,将根元数据出现之后的所有元数据确定为有效元数据。
S4084,根据确定出的有效元数据,确定有效元数据的描述信息。具体的确定过程可参考上述root FID的确定过程,在此不再赘述。
在步骤S410中,解析元数据及其描述信息,以生成文件信息,并将文件信息写入文件列表。
在一些实施例中,步骤S410包括以下步骤:
S4101、判断所确定的元数据及其描述信息,是否为根元数据及其描述信息。前述提到,根元数据root FE及其描述信息root FID并不会记录用户刻录的文件信息,因此,需要判断元数据是根元数据root FE还是有效元数据FE。具体地,可判断描述信息是否符合第四条件。其中第四条件为判断描述信息的值fileCharacteristics的参数为FID_FILE_CHAR_PARENT就代表着它是根元数据的描述信息,对应的元数据也为根元数据。
S4102、若不是,则分别从描述信息和元数据中获取文件名和文件属性。有效元数据的描述信息FID的对象中的值impUseAndFileIdent代表着文件的名称。文件的属性可通过有效元数据FE的值icbTag中的fileType获取,当值等于ICBTAG_FILE_TYPE_DIRECTORY时则代表文件类型是一个目录,否则是常规文件;文件的用户ID可以通过FE的值uid获取;文件的用户组ID可以通过FE的值gid获取;文件的权限可以通过FE的值permissions获取。跳转到下一个FE和FID,直到最后一个FE和FID被解析完成。
S4103、读取与其相邻的下一个数据块中的元数据及其描述信息,重复获取文件名和文件属性的步骤,直到遍历完数据存储区域。跳转下一个FID的方式是在当前FID所位于的地址上,加上当前FID对象中的值lengthOfImpUse和值lengthFileIdent即可获取下一个FID,从FID的值icb可以确认下一个FE的所在的位置,读取一个块(2048字节)即可获取到下一个FE对象。
S4104、基于所述文件名和文件属性,生成文件信息,其中,文件的属性包括:文件类型、用户标识、用户组标识、文件权限。
前述提到,函数quickudf_parse会获取到文件列表,当获取到文件信息后,将获取的文件信息写入该文件列表中file_list中,file_list存储用户最关心的数据,该file_list可通过如下结构体对象表示:
该结构体以双向链表的形式将所有文件信息串联了起来。
在一个具体示例中,结合图9,图9示出了根据本发明一个实施例提供的文件系统的生成文件信息的方法流程示意图。具体地:
1、Root FE和Root FID并不会记录用户刻录的文件信息,真正记录用户文件信息是从Root FE后的下一个FE和FID开始的,因此需要根据FID的值fileCharacteristics进行判断,如果值得参数为FID_FILE_CHAR_PARENT就代表着它是Root FID,需要跳过,获取下一个FE和FID;
2、从FID中获取文件名,FID对象中的值impUseAndFileIdent代表着文件的名称,将其记录到文件信息列表中;
3、从FE中获取文件的属性,如用户最关心的属性有文件类型(常规文件或目录)信息,可以通过FE的值icbTag中的fileType获取,当值等于ICBTAG_FILE_TYPE_DIRECTORY时则代表文件类型是一个目录,否则是常规文件爱你;文件的用户ID可以通过FE的值uid获取;文件的用户组ID可以通过FE的值gid获取;文件的权限可以通过FE的值permissions获取;
4、跳转到下一个FE和FID,直到最后一个FE和FID被解析完成。跳转下一个FID的方式是在当前FID所位于的地址上,加上当前FID对象中的值lengthOfImpUse和值lengthFileIdent即可获取下一个FID,从FID的值icb可以确认下一个FE的所在的位置,读取一个块(2048字节)即可获取到下一个FE对象。
在步骤S412中,输出文件列表。优选地,首先,将文件列表封装为结构体对象,并将其发送至展示应用。展示应用即前述文件管理器(dde-file-manager)。结构对象即前述前述file_list的结构体对象:
然后,通过展示应用解析结构体对象,输出预览信息,并将预览信息呈现给用户。8.上层应用程序dde-file-manager解析结构体变量file_list,将变量的数据使用UI界面展示给用户。
另外,还可以将结构体对象进行存储。以便下次预览时,可以直接显示。具体地,可将该结构对象缓存至内存中,下一次预览同一张光盘时,直接显示缓存的内容。
本发明提供的方法通过在。
这里描述的各种技术可结合硬件或软件,或者它们的组合一起实现。从而,本发明的方法和设备,或者本发明的方法和设备的某些方面或部分可采取嵌入有形媒介,例如可移动硬盘、U盘、软盘、CD-ROM或者其它任意机器可读的存储介质中的程序代码(即指令)的形式,其中当程序被载入诸如计算机之类的机器,并被所述机器执行时,所述机器变成实践本发明的设备。
在程序代码在可编程计算机上执行的情况下,计算设备一般包括处理器、处理器可读的存储介质(包括易失性和非易失性存储器和/或存储元件),至少一个输入装置,和至少一个输出装置。其中,存储器被配置用于存储程序代码;处理器被配置用于根据该存储器中存储的所述程序代码中的指令,执行本发明的方法。
以示例而非限制的方式,可读介质包括可读存储介质和通信介质。可读存储介质存储诸如计算机可读指令、数据结构、程序模块或其它数据等信息。通信介质一般以诸如载波或其它传输机制等已调制数据信号来体现计算机可读指令、数据结构、程序模块或其它数据,并且包括任何信息传递介质。以上的任一种的组合也包括在可读介质的范围之内。
在此处所提供的说明书中,算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与本发明的示例一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的较佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下被实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员应当理解在本文所公开的示例中的设备的模块或单元或组件可以布置在如该实施例中所描述的设备中,或者可替换地可以定位在与该示例中的设备不同的一个或多个设备中。前述示例中的模块可以组合为一个模块或者此外可以分成多个子模块。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
此外,所述实施例中的一些在此被描述成可以由计算机系统的处理器或者由执行所述功能的其它装置实施的方法或方法元素的组合。因此,具有用于实施所述方法或方法元素的必要指令的处理器形成用于实施该方法或方法元素的装置。此外,装置实施例的在此所述的元素是如下装置的例子:该装置用于实施由为了实施该发明的目的的元素所执行的功能。
如在此所使用的那样,除非另行规定,使用序数词“第一”、“第二”、“第三”等等来描述普通对象仅仅表示涉及类似对象的不同实例,并且并不意图暗示这样被描述的对象必须具有时间上、空间上、排序方面或者以任意其它方式的给定顺序。
尽管根据有限数量的实施例描述了本发明,但是受益于上面的描述,本技术领域内的技术人员明白,在由此描述的本发明的范围内,可以设想其它实施例。此外,应当注意,本说明书中使用的语言主要是为了可读性和教导的目的而选择的,而不是为了解释或者限定本发明的主题而选择的。因此,在不偏离所附权利要求书的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。对于本发明的范围,对本发明所做的公开是说明性的而非限制性的,本发明的范围由所附权利要求书限定。
Claims (14)
1.一种光盘文件的快速预览方法,包括:
响应于用户对光盘文件的快速预览请求,获取光盘信息,所述光盘信息包括光驱设备的名称、光盘路径和文件列表;
对所述光驱设备的名称所指示的文件系统进行验证;
若验证通过,则对所述文件系统进行解析,以定位到数据存储区域;
从所述数据存储区域中确定出元数据及其描述信息;
解析所述元数据及其描述信息,以生成文件信息,并将所述文件信息写入所述文件列表;
输出所述文件列表。
2.如权利要求1所述的方法,其中,所述对所述光驱设备的名称所指示的文件系统进行验证的步骤包括:
至少基于所述光盘的设备描述符,获取最后一个节点的开始位置和结束位置;
从所述开始位置起,跳转第一字节长度,将跳转到的位置作为第一起始点;
自第一起始点起,依序读取多个数据块,以确定数据块的内容是否符合预设条件;
若符合预设条件,则自所述开始位置跳转第二字节长度,将跳转到的位置作为第二起始点;
自第二起始点起,读取一个数据块;
对所读取的数据块进行处理,以判定该数据块中是否包含表示查询卷描述符关键指针的预设字符;
若包含预设字符,则基于所述结束位置,确定第三起始点;
自所述第三起始点起,读取一个数据块,并对所读取的数据块进行处理,以判定该数据块是否包含所述预设字符;
若所述数据块包含预设字符,则确定所述光驱设备的名称所指示的文件系统验证通过。
3.如权利要求2所述的方法,其中,所述自第一起始点起,依序读取多个数据块,以确定数据块的内容是否符合预设条件的步骤包括:
自第一起始点起,读取一个数据块,并检查所读取的数据块的内容是否符合第一条件;
若符合第一条件,则继续读取下一个数据块,并检查所读取的数据块的内容是否符合第二条件;
若符合第二条件,则继续读取下一个数据块,并检查所读取的数据块的内容是否符合第三条件。
4.如权利要求2所述的方法,其中,所述对所述文件系统进行解析,以定位到数据存储区域的步骤包括:
基于所述预设字符所表示的查询卷描述符关键指针,确定元数据区域的开始位置和长度;
基于所述长度,确定元数据块的数量;
基于所述开始位置,遍历所述元数据块,以确定出包含关键元数据的元数据块;
对所确定的元数据块进行处理,以确定出数据存储区域的位置。
5.如权利要求4所述的方法,其中,所述对所确定的元数据块进行处理的步骤包括:
将所确定的元数据块转换为预设对象。
6.如权利要求1所述的方法,其中,所述从所述数据存储区域中确定出元数据及其描述信息的步骤包括:
从所述数据存储区域中读取第一个数据块,作为根元数据,并将其转换为结构体对象;
解析所述结构体对象,以获取所述根元数据的描述信息;
将所述数据存储区域中除所述根元数据的非根元数据,确定为有效元数据;
根据确定出的有效元数据,确定有效元数据的描述信息。
7.如权利要求1所述的方法,其中,所述解析所述元数据及其描述信息,以生成文件信息的步骤包括:
判断所确定的元数据及其描述信息,是否为根元数据及其描述信息;
若不是,则分别从所述描述信息和元数据中获取文件名和文件属性;
读取与其相邻的下一个数据块中的元数据及其描述信息,重复所述获取文件名和文件属性的步骤,直到遍历完数据存储区域;
基于所述文件名和文件属性,生成文件信息,其中,文件的属性包括:文件类型、用户标识、用户组标识、文件权限。
8.如权利要求7所述的方法,其中,所述判断所确定的元数据及其描述信息,是否为根元数据及其描述信息的步骤包括:
判断所述描述信息是否符合第四条件;
若是,则所述描述信息对应的元数据为根元数据。
9.如权利要求1所述的方法,其中,所述计算设备中驻留有展示应用,所述计算设备中所述输出所述文件列表的步骤包括:
将所述文件列表封装为结构体对象,并将其发送至所述展示应用;
通过所述展示应用解析所述结构体对象,输出预览信息,并将所述预览信息呈现给用户。
10.如权利要求9所述的方法,其中,还包括:
将所述结构体对象进行存储。
11.如权利要求2所述的方法,其中,每一所述数据块包括2048字节,所述第一字节长度为16*2048字节,所述第二字节长度为(16+256)*2048字节。
12.如权利要求2所述的方法,其中,所述对所读取的数据块进行处理,以判定该数据块中是否包含预设字符的步骤包括:
将所述数据块的二进制数据转换为结构体标签;
获取所述结构体标签中的识别字符,并判定该识别字符是否为预设字符。
13.一种计算设备,包括:
至少一个处理器;和
存储有程序指令的存储器,其中,所述程序指令被配置为适于由所述至少一个处理器执行,所述程序指令包括用于执行如权利要求1-12中任一项所述方法的指令。
14.一种存储有程序指令的可读存储介质,当所述程序指令被计算设备读取并执行时,使得所述计算设备执行如权利要求1-12中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111579218.3A CN114281257A (zh) | 2021-12-22 | 2021-12-22 | 一种光盘文件的快速预览方法、计算设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111579218.3A CN114281257A (zh) | 2021-12-22 | 2021-12-22 | 一种光盘文件的快速预览方法、计算设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114281257A true CN114281257A (zh) | 2022-04-05 |
Family
ID=80874298
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111579218.3A Pending CN114281257A (zh) | 2021-12-22 | 2021-12-22 | 一种光盘文件的快速预览方法、计算设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114281257A (zh) |
-
2021
- 2021-12-22 CN CN202111579218.3A patent/CN114281257A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7631022B2 (en) | Information processing apparatus and recording medium | |
CN100437552C (zh) | 执行标记文档applet的设备和方法 | |
CN109634718B (zh) | 云平台创建镜像的方法及系统 | |
JP2003153210A (ja) | プリロード情報が記録された情報貯蔵媒体、その再生装置及び再生方法 | |
US9304742B2 (en) | Modifying a middleware | |
CN113066515B (zh) | 一种光盘刻录方法、计算设备及可读存储介质 | |
US9513875B2 (en) | Processing instruction information | |
CN112346668B (zh) | 一种光盘信息获取方法、计算设备及可读存储介质 | |
JP2008107965A (ja) | 情報処理装置、情報処理方法、プログラム、プログラム記録媒体 | |
US20160239509A1 (en) | File explorer system usable in an emulated integrated development environment (ide) | |
CN113823331A (zh) | 一种光盘追加刻录方法、装置及计算设备 | |
US20140108356A1 (en) | Information processing apparatus | |
US7814334B2 (en) | Method and apparatus for changing and adding activation keys for functions of digital content without having to change and recompile the digital content | |
CN114281257A (zh) | 一种光盘文件的快速预览方法、计算设备及存储介质 | |
KR101478034B1 (ko) | 컨텐츠의 코드 분석 장치, 그 방법 및 그 방법이 기록된 컴퓨터로 판독 가능한 기록매체 | |
CN114816772B (zh) | 基于兼容层运行的应用的排错方法、排错系统及计算设备 | |
CN114461214A (zh) | 一种页面显示方法、装置、电子设备及存储介质 | |
JP2009122985A (ja) | サブプロセス実行システム及びサブプロセス実行プログラム | |
CN106897588B (zh) | 一种标签函数的处理方法及装置 | |
US20060075309A1 (en) | Variable writing through a fixed programming interface | |
US20240045701A1 (en) | Method, device and system for loading page data | |
JP3120493B2 (ja) | データ処理装置 | |
JP2006260316A (ja) | 文章形式変換装置、プログラム、および方法 | |
JP2000132480A (ja) | インターネット閲覧方法、装置、およびインターネット閲覧プログラムを記録した記録媒体 | |
TWI448965B (zh) | 解析程式碼的方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |