专利名称:一种大容量文件分割方法、装置及系统的制作方法
技术领域:
本发明属于计算机软件领域,尤其涉及一种大容量文件分割方法、装置及系统。
背景技术:
目前,光盘、U盘、移动硬盘等大容量存储设备已经被广泛应用,常用于大容量文件 的存储和运输,但是由于其通讯协议复杂、价格昂贵、烧写速度相对慢等,在实际应用中很 少,且较难直接使用这些大容量存储设备作为文件数据分解应用的载体,而是采用小容量 的存储器作为可移动和重复使用的载体,结合单片机对文件数据进行分解应用。例如在彩 色电视机生产行业,需要在每台电视机产品中烧录一个不同的HDCP KEY数据,该数据是以 订单数量为单位的二进制文件,由于该二进制文件数据量较大(容量为M级),而存储器数 据存储量较小,如容量较大的海量存储器W27E040的容量仅为K级,512K,因此必须对文件 分割成的独立小文件,以实现数据的分解应用。当前有许多基于操作系统的文件分割工具可实现文件分割,如运行于Windows系 统的WinRAR软件、FileSplit软件,其分割原理是对文件进行简单的切割,功能主要面向数 据的拆分存储和传输,这些软件分割后的文件一般需重新组合方能使用,不能直接烧录到 存储器,以结合单片机实现数据的分解应用。另外,还有的文件分割方法是将大容量文件一次性读入内存,然后在内存中对文 件数据进行分割处理。当文件容量较大时,这种方式一方面占用了大量的系统资源开销,另 一方面应用程序会常遇到因内存耗尽而操作失败的不稳定性问题,尽管文件分割的功能实 现了,但是应用程序本身的稳定性并不理想。
发明内容
本发明实施例的目的在于提供一种大容量文件分割方法,旨在解决现有将大容量 文件一次性读入内存进行分割处理时存在系统资源开销占用较大,稳定性差的问题。本发明实施例是这样实现的,一种大容量文件分割方法,所述方法包括下述步 骤根据存储器的容量和被分割文件中单条数据的大小,获取分割后单个子文件包含 的数据的数量;根据被分割文件包含的数据的总量,和分割后单个子文件包含的数据的数量,获 取分割后的子文件数量;获取读、写文件两个通道,根据分割后单个子文件包含的数据的数量分配动态数 组的大小,循环分批读写数据,分割被分割文件。本发明实施例的另一目的在于提供一种大容量文件分割烧录方法,所述方法包括 下述步骤根据存储器的容量和被分割文件中单条数据的大小,获取分割后单个子文件包含 的数据的数量;
根据被分割文件包含的数据的总量,和分割后单个子文件包含的数据的数量,获 取分割后的子文件数量;获取读、写文件两个通道,根据分割后单个子文件包含的数据的数量分配动态数 组的大小,循环分批读写数据,分割被分割文件;将分割后的子文件分别烧录到存储器。本发明实施例的另一目的在于提供一种大容量文件分割装置,所述装置包括子文件数据量计算单元,用于根据存储器的容量和被分割文件中单条数据的大 小,获取分割后单个子文件包含的数据的数量;子文件数量计算单元,用于根据被分割文件包含的数据的总量,和分割后单个子 文件包含的数据的数量,获取分割后的子文件数量;空闲通道获取单元,用于获取读、写文件两个空闲通道;动态数组分配单元,用于根据分割后单个子文件包含的数据的数量分配动态数组 的大小;以及分割控制单元,用于根据所述读、写文件两个空闲通道,以及动态数组的大小,循 环分批读写数据,分割被分割文件。 本发明实施例的另一目的在于提供一种包含上述大容量文件分割装置的系统。本发明实施例的另一目的在于提供一种大容量文件分割烧录装置,所述装置包 括子文件数据量计算单元,用于根据存储器的容量和被分割文件中单条数据的大 小,获取分割后单个子文件包含的数据的数量;子文件数量计算单元,用于根据被分割文件包含的数据的总量,和分割后单个子 文件包含的数据的数量,获取分割后的子文件数量;空闲通道获取单元,用于获取读、写文件两个空闲通道;动态数组分配单元,用于根据分割后单个子文件包含的数据的数量分配动态数组 的大小;分割控制单元,用于根据所述读、写文件两个空闲通道,以及动态数组的大小,循 环分批读写数据,分割被分割文件;以及数据烧录单元,用于将分割后的子文件分别烧录到存储器。本发明实施例的另一目的在于提供一种包含上述大容量文件分割烧录装置的系 统。本发明实施例运用读、写文件双通道和动态数组循环分批读写数据的方式,对大 容量二进制文件进行精确分割,程序分割速度快、性能稳定且避免了因内存耗尽而操作失 败的问题,分割后的子文件为信息完整的独立文件,可直接烧写到存储器中,结合单片机进 行数据的分解应用。
图1是本发明实施例提供的大容量文件分割方法的实现流程图;图2是本发明实施例提供的对被分割文件进行分割的具体实现流程图;图3是本发明实施例提供的大容量文件分割装置的结构图。
具体实施例方式为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对 本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并 不用于限定本发明。本发明实施例通过读、写文件双通道和动态数组循环分批读写数据的方式分割文 件,分割后的子文件为信息完整的独立文件,可直接烧写到存储器中,且可以结合单片机实 现数据的分解应用。当被分割的文件较大或者非常大,如远远大于内存时,如果使用单个文件通道定 义的内存二进制缓冲数组非常容易造成内存的用尽而导致操作失败,另一方面,它的处理 速度和可靠性也不理想。在本发明实施例中,分别使用读、写2个通道,结合动态数组循环 分批读写数据,即在读文件时使用一个通道将数据读入动态数组,在写文件时使用另一个 通道将动态数组的数据存入文件。在分割文件的循环中,首先从被分割文件中读取指定分割大小的一段数据到动态 数组,再将动态数组的数据写入第一个子文件中;分割下一个子文件时,重定义动态数组, 从被分割文件中读取另一段的数据,再写入到另一个子文件中。循环直到读出文件最后一 段数据,写入到最后一个子文件中。图1示出了本发明实施例提供的大容量文件分割方法的实现流程,详述如下在步骤SlOl中,根据存储器的容量和被分割文件中单条数据的大小,获取分割后 单个子文件包含的数据的数量;在步骤S102中,根据被分割文件包含的数据的总量,和分割后单个子文件包含的 数据的数量,获取分割后的子文件数量;在步骤S103中,获取读、写文件两个通道,根据分割后单个子文件包含的数据的 数量分配动态数组的大小,循环分批读写数据,分割被分割文件。图2示出了本发明实施例提供的对被分割文件进行分割的具体实现流程,详述如 下在步骤S201中,获取第一空闲通道,读取被分割文件;在步骤S202中,进入分割循环,判断当前文件是不是最后一个分割后的子文件, 是则执行步骤S209,否则执行步骤S203 ;在步骤S203中,根据分割后单个子文件包含的数据的数量分配动态数组的大小;在步骤S204中,读取数据到动态数组;在步骤S205中,关闭读数据通道;在步骤S206中,获取分割后的子文件名;在步骤S207中,获取第二空闲通道,将动态数组中的数据写入子文件名对应的子 文件;在步骤S208中,关闭写数据通道;在步骤S209中,根据最后一个子文件包含的数据的数量重新分配动态数组的大小,并执行步骤S204。上述流程的具体代码实现示例如下
NumMAX = Int (&H80000/Val (Text6. Text)) 计算分割后单个子文件包含的数据
的数量,即存储器可存放的最大数据数量。存储器的最大存储量&H80000 = 524288,Val (Text6. text)为单条数据大小。NumFiles = CInt ((Val (Text2. Text))/NumMAX) 计算分割后的子文件数量。 Val (Text2. Text)为被分割文件包含的数据的总量,NumMAX为单个子文件包含的数据的数
MoFnum = FreeFile \*取得第1空闲通道用来读取被分割文件OpenCWenjj &〃 \Encode.Bin" )For Binary As#Fnum \* 打开被分割的文件Fori = 1 To NumFiles \*进入文件分割循环Ifi < NumFiles Then 非最后一个子文件分割情况ReDim FilesByte (1 To (NumMAX* (Val (Text6. Text)))) 按分割尺寸重新分配动 态数组大小Get#Fnum,, FilesByte 读取数据到动态数组Else \*最后一个子文件分割情况ReDim FilesByte (1 To(((Val(Text2. Text))-((i_l)*NumMAX))*(Val(Text6. Text)))) \*按分割尺寸重新分配动态数组大小Get#Fnum,, FilesByte 读取数据到动态数组Close#Fnum 关闭读文件数据的第1通道End IfSaveName = Wenj j &〃 \〃 & Text7. Text & LTrim$ (Str (i))&〃 .Bin" \* 获得 分割后的子文件名Fnuml = FreeFile \*获得到第2个空闲通道用来写入数据Open SaveName For Binary As Fnuml 打开本次分割的子文件Put#Fnuml, 1, FilesByte \* 写入数据Close#Fnuml 关闭写文件数据的第2通道Next \*进入下一循环,直到被分割文件分割完毕在本发明实施例中,可以将分割出来的子文件分别烧录到存储器中,实现数据的 分解应用。图3示出了本发明实施例提供的大容量文件分割装置的结构,为了便于说明,仅 示出了与本发明实施例相关的部分。该装置可以用于各种大容量文件分割设备,例如计算机等,可以是运行于计算机 内的软件单元、硬件单元或者软硬件相结合的单元,也可以作为独立的挂件集成到计算机 中或者运行于计算机的应用系统中,其中子文件数据量计算单元31根据存储器的容量和被分割文件中单条数据的大小, 获取分割后单个子文件包含的数据的数量。子文件数量计算单元32根据被分割文件包含的数据的总量,和分割后单个子文 件包含的数据的数量,获取分割后的子文件数量;空闲通道获取单元33获取读、写文件两个空闲通道;动态数组分配单元34根据分割后单个子文件包含的数据的数量分配动态数组的大小;分割控制单元35根据读、写文件两个空闲通道,以及动态数组的大小,循环分批 读写数据,分割被分割文件。作为本发明的一个实施例,该大容量文件分割装置可以集成到大容量文件分割烧录装置中,该大容量文件分割烧录装置可以用于各种大容量文件分割烧录设备,例如计算 机等,可以是运行于计算机内的软件单元、硬件单元或者软硬件相结合的单元,也可以作为 独立的挂件集成到计算机中或者运行于计算机的应用系统中。数据烧录单元36将分割后的子文件分别烧录到存储器。作为本发明实施例的一个具体应用,在彩色电视机生产领域,需在线烧写HDCP KEY码数据到每台电视机中,通过本发明实施例将含任意订单数量KEY码的二进制文件,选 择一定的制作方式分割成若干个子文件,并将子文件烧写到存储器,例如W27E040中,结合 单片机进行KEY码数据的分解应用。其具体实现方式为(1)输入文件分割相关信息在应用程序的操作界面中选择本次文件分割的制作方案,填写订单号、订单数量、 机芯、起始条码号、MAC地址起始号,并点击“打开已编码的KEY文件”按钮,选择被分割的二 进制文件“ 10000 (500000-509999). bin”。其中制作方案决定了本次分割的数据格式,条码 号、MAC地址码为叠加信息捆绑到每个KEY码中,订单号、机芯为子分割文件的公共信息;(2)文件分割点击“开始制作”按钮,程序会根据输入的信息及制作方案自动分割 “ 10000 (500000-509999). bin”,,分割后的子文件存放在桌面以订单名命名的文件夹中,子 文件的命名方式为“机芯号+数字序列”,例如8M791。文件夹内包含一个“说明”文件,记 载本次分割的详细信息。(3)数据烧写及分解应用使用编程器将分割出来的子文件分别烧录到存储器,例如并行存储器中,再将已 烧录数据的存储器接入到烧录设备,在生产时将数据分解烧录到每台电视机产品中。本发明实施例运用读、写文件双通道和动态数组循环分批读写数据的方式,对大 容量二进制文件进行精确分割,分割速度快、性能稳定且避免了因内存耗尽而操作失败的 问题,分割后的子文件为信息完整的独立文件,可直接烧写到存储器中,结合单片机进行数 据的分解应用。以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精 神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
权利要求
一种大容量文件分割方法,其特征在于,所述方法包括下述步骤根据存储器的容量和被分割文件中单条数据的大小,获取分割后单个子文件包含的数据的数量;根据被分割文件包含的数据的总量,和分割后单个子文件包含的数据的数量,获取分割后的子文件数量;获取读、写文件两个通道,根据分割后单个子文件包含的数据的数量分配动态数组的大小,循环分批读写数据,分割被分割文件。
2.如权利要求1所述的方法,其特征在于,所述获取读、写文件两个通道,根据分割后 单个子文件包含的数据的数量分配动态数组的大小,循环分批读写数据,分割被分割文件 的步骤具体为获取第一空闲通道,读取被分割文件;进入分割循环,根据分割后单个子文件包含的数据的数量分配动态数组的大小; 读取数据到动态数组; 关闭读数据通道; 获取分割后的子文件名;获取第二空闲通道,将动态数组中的数据写入子文件名对应的子文件; 关闭写数据通道;进入下一循环,直到被分割文件分割完毕。
3.如权利要求1或2所述的方法,其特征在于,所述方法进一步包括下述步骤 将分割后的子文件分别烧录到存储器。
4.一种大容量文件分割烧录方法,其特征在于,所述方法包括下述步骤根据存储器的容量和被分割文件中单条数据的大小,获取分割后单个子文件包含的数 据的数量;根据被分割文件包含的数据的总量,和分割后单个子文件包含的数据的数量,获取分 割后的子文件数量;获取读、写文件两个通道,根据分割后单个子文件包含的数据的数量分配动态数组的 大小,循环分批读写数据,分割被分割文件; 将分割后的子文件分别烧录到存储器。
5.如权利要求4所述的方法,其特征在于,所述获取读、写文件两个通道,根据分割后 单个子文件包含的数据的数量分配动态数组的大小,循环分批读写数据,分割被分割文件 的步骤具体为获取第一空闲通道,读取被分割文件;进入分割循环,根据分割后单个子文件包含的数据的数量分配动态数组的大小; 读取数据到动态数组; 关闭读数据通道; 获取分割后的子文件名;获取第二空闲通道,将动态数组中的数据写入子文件名对应的子文件; 关闭写数据通道;进入下一循环,直到被分割文件分割完毕。
6.一种大容量文件分割装置,其特征在于,所述装置包括子文件数据量计算单元,用于根据存储器的容量和被分割文件中单条数据的大小,获 取分割后单个子文件包含的数据的数量;子文件数量计算单元,用于根据被分割文件包含的数据的总量,和分割后单个子文件 包含的数据的数量,获取分割后的子文件数量;空闲通道获取单元,用于获取读、写文件两个空闲通道;动态数组分配单元,用于根据分割后单个子文件包含的数据的数量分配动态数组的大 小;以及分割控制单元,用于根据所述读、写文件两个空闲通道,以及动态数组的大小,循环分 批读写数据,分割被分割文件。
7.如权利要求6所述的装置,其特征在于,所述装置还包括数据烧录单元,用于将分割后的子文件分别烧录到存储器。
8.一种包含权利要求6的大容量文件分割装置的系统。
9.一种大容量文件分割烧录装置,其特征在于,所述装置包括子文件数据量计算单元,用于根据存储器的容量和被分割文件中单条数据的大小,获 取分割后单个子文件包含的数据的数量;子文件数量计算单元,用于根据被分割文件包含的数据的总量,和分割后单个子文件 包含的数据的数量,获取分割后的子文件数量;空闲通道获取单元,用于获取读、写文件两个空闲通道;动态数组分配单元,用于根据分割后单个子文件包含的数据的数量分配动态数组的大分割控制单元,用于根据所述读、写文件两个空闲通道,以及动态数组的大小,循环分 批读写数据,分割被分割文件;以及数据烧录单元,用于将分割后的子文件分别烧录到存储器。
10. 一种包含权利要求9的大容量文件分割烧录装置的系统。
全文摘要
本发明适用于计算机软件领域,提供了一种大容量文件分割方法、装置及系统,所述方法包括下述步骤根据存储器的容量和被分割文件中单条数据的大小,获取分割后单个子文件包含的数据的数量;根据被分割文件包含的数据的总量,和分割后单个子文件包含的数据的数量,获取分割后的子文件数量;获取读、写文件两个通道,根据分割后单个子文件包含的数据的数量分配动态数组的大小,循环分批读写数据,分割被分割文件。本发明运用读、写文件双通道和动态数组循环分批读写数据的方式,对大容量二进制文件进行精确分割,程序分割速度快、性能稳定且避免了因内存耗尽而操作失败的问题,分割后的子文件可直接烧写到存储器中,结合单片机进行数据的分解应用。
文档编号G06F17/30GK101826109SQ201010146178
公开日2010年9月8日 申请日期2010年4月7日 优先权日2010年4月7日
发明者朱其盛, 王勇 申请人:深圳创维-Rgb电子有限公司