背景技术
常见的文件***有文件分配表(File Allocation Table,FAT)文件***和新技术文件***(New Technology File System,NTFS)等,其中被存储卡所常用的是由微软公司建立的FAT文件***,包括FAT12、FAT16和FAT32文件***。
FAT文件***通常由主引导记录和若干FAT分区组成,存储卡上通常只有一个FAT分区,其中,该FAT分区由引导扇区(BPB)、FAT表、根目录区(FDT)以及数据区组成。
引导扇区(BPB)是FAT分区的第一个扇区,即逻辑扇区0,主要用于记录整个FAT文件***中相关的参数设置,例如:每扇区字节数、每簇扇区数、每个FAT的扇区数、扇区总数、根目录项数等等参数。
FAT表记录了文件***中的组织关系,尤为重要,所以有两个FAT表,FAT1表和FAT2表,但其内容完全一致,该表各表项共同记录了存储基本单元簇的链表索引结构,即每个文件的起始簇及其后续链接的各个簇号;并表明哪些是可用(FREE)的空簇。其中,簇为FAT分区中文件数据的最小存储单位,文件长度若不足一个簇,也要占用一个簇的空间;若长度不止一个簇,则通过由链表所指引的簇号,将文件数据存储到数据区中的多个簇的空间。
根目录区(FDT)记录了文件***根目录的内容,包括每个文件和文件夹的名称、大小、起始位置、创建时间、修改时间等基本内容。文件***中的每个文件都在目录表中有记载。目录和文件均表现为一个文件项,并通过文件项 的属性字节加以区分。
数据区,实际的文件数据和目录及子目录数据存储的区域,占用大部分存储空间,数据区以簇为存储单位,通过文件的链表组织起来,数据的读写都是被动的。FAT***以簇为基本单位存放文件数据,每个簇有N个扇区,每个文件有M个簇,每簇的扇区数N与磁盘的总容量大小有关,文件占用的簇M多少与文件大小有关。
刚格式化好的文件***,往里面拷贝文件,簇的占用顺序是以源文件的目录层次来存放的,即在数据区,目录数据和文件数据掺杂在一起存放,如图1及2所示,这种存放模式将数据区分成很多碎片,在保护文件时计算复杂。
文件夹的内容可能是分层次的,文件夹下面有文件夹和文件,存放这些数据的时候如果掺杂在一起,就要分很多片段来处理,如图2所述,文件数据区和目录数据掺在在一起,分成的片段较多,在图2中数据区被分成六个片段,在存储器中,数据的保护是以地址范围为依据,在此情况下,六个片段则形成六个保护范围,在保护文件时计算较复杂。
发明内容
本发明的目的在于提供一种文件***数据的管理方法,旨在解决现有技术提供的***文件中,目录数据和文件数据的存放不规则无层次,将数据区分成很多碎片,不利于保护文件的问题。
本发明是这样实现的,一种文件***数据的管理方法,所述方法包括下述步骤:
递归枚举源文件夹,计算源文件夹中所有文件夹和文件的目录及子目录数据需要的扇区总数;
根据源文件夹中所有文件夹和文件的目录及子目录数据需要的扇区总数将目标磁盘的数据区分成目录数据区与文件数据区;
获取文件数据区的扇区起始偏移地址信息;
将源文件夹中所有目录及子目录数据写入目标磁盘数据区中的目录数据区,将源文件夹中所有文件数据写入目标磁盘数据区中的文件数据区;
根据目录及子目录数据和文件数据的写入地址,更新文件***的两个文件分配表。
本发明实施例的另一目的在于提供一种文件***数据的管理***,所述***包括:
扇区总数计算模块,用于递归枚举源文件夹,计算源文件夹中所有文件夹和文件的目录及子目录数据需要的扇区总数;
数据区划分模块,用于根据源文件夹中所有文件夹和文件的目录及子目录数据需要的扇区总数将目标磁盘的数据区分成目录数据区与文件数据区;
扇区起始偏移地址信息获取模块,用于获取文件数据区的扇区起始偏移地址信息;
写入模块,用于将源文件夹中所有目录及子目录数据写入目标磁盘数据区中的目录数据区,将源文件夹中所有文件数据写入目标磁盘数据区中的文件数据区;以及
更新模块,用于根据目录及子目录数据和文件数据的写入地址,更新文件***的两个文件分配表。
在本发明实施例中,递归枚举源文件夹,计算所有文件夹和文件的目录及子目录数据需要的扇区总数;根据所有文件夹和文件的目录数据需要的扇区总数将目标磁盘的数据区分成目录数据区与文件数据区,并获取文件数据区的扇区起始偏移地址信息;将所有目录及子目录数据写入目标磁盘数据区中的目录数据区,将所有文件数据写入目标磁盘数据区中的文件数据区;根据目录数据和文件数据的写入地址,更新文件***的两个文件分配表,从而实现将文件数据和目录数据分开存储,有效简化处理计算程序。
具体实施方式
为了使本发明的目的、技术方案及有益效果更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
在本发明实施例中,递归枚举源文件夹,计算所有文件夹和文件的目录及子目录数据需要的扇区总数;根据所有文件夹和文件的目录数据需要的扇区总数将目标磁盘的数据区分成目录数据区与文件数据区,并获取文件数据区的扇区起始偏移地址信息;将所有目录及子目录数据写入目标磁盘数据区中的目录数据区,将所有文件数据写入目标磁盘数据区中的文件数据区;根据目录数据和文件数据的写入地址,更新文件***的两个文件分配表,从而实现将文件数据和目录数据分开存储,有效简化处理计算程序。
本发明实施例的目的在于提供一种文件***数据的管理方法,其特征在于,所述方法包括下述步骤:
递归枚举源文件夹,计算所有文件夹和文件的目录及子目录数据需要的扇区总数;
根据所有文件夹和文件的目录数据需要的扇区总数将目标磁盘的数据区分成目录数据区与文件数据区,并获取文件数据区的扇区起始偏移地址信息;
将所有目录及子目录数据写入目标磁盘数据区中的目录数据区,将所有文 件数据写入目标磁盘数据区中的文件数据区;
根据目录数据和文件数据的写入地址,更新文件***的两个文件分配表。
进一步地,所述目录数据区的空间大于或等于所有文件夹和文件的目录数据需要的扇区总数。
进一步地,写入目标磁盘数据区中目录数据区和文件数据区的数据存放的地址连续。
本发明实施例的另一目的在于提供一种文件***数据的管理***,其特征在于,所述***包括:
扇区总数计算模块,用于递归枚举源文件夹,计算所有文件夹和文件的目录及子目录数据需要的扇区总数;
数据区划分模块,用于根据所述扇区总数计算模块计算得到的所有文件夹和文件的目录数据需要的扇区总数将目标磁盘的数据区分成目录数据区与文件数据区;
扇区起始偏移地址信息获取模块,用于获取文件数据区的扇区起始偏移地址信息;
写入模块,用于根据所述数据区划分模块对数据区的划分,将所有目录及子目录数据写入目标磁盘数据区中的目录数据区,将所有文件数据写入目标磁盘数据区中的文件数据区;以及
更新模块,用于根据目录数据和文件数据的写入地址,更新文件***的两个文件分配表。
进一步地,所述目录数据区的空间大于或等于所有文件夹和文件的目录数据需要的扇区总数。
进一步地,写入目标磁盘数据区中目录数据区和文件数据区的数据存放的地址连续。
图3示出了本发明实施例提供的文件***数据的管理方法的实现流程,其具体的步骤如下所述:
在步骤S101中,递归枚举源文件夹,计算所有文件夹和文件的目录及子目录数据需要的扇区总数。
在步骤S102中,根据所有文件夹和文件的目录数据需要的扇区总数将目标磁盘的数据区分成目录数据区与文件数据区,并获取文件数据区的扇区起始偏移地址信息。
在本发明实施例中,该对数据区的划分依据是:目录数据区的空间大于或等于所有文件夹和文件的目录数据需要的扇区总数。即目录数据区要能存储所有目录数据。
在本发明实施例中,划分之后得到的目录数据区和文件数据区的数据存储的地址是连续的,其中,为了节省目标磁盘数据区的空间,使数据区能够存放更多的目录数据和文件数据,所有的目录及子目录在目录数据区存放的地址连续,所有的文件数据在文件数据区存放的地址连续。
在此情况下,目录数据区和文件数据区各只有一个片段,即只形成二个保护范围,相比现有技术中目录数据和文件数据掺杂在一起存放,形成多个片段,多个保护范围来说,在保护文件时计算较简单。
在步骤S103中,将所有目录及子目录数据写入目标磁盘数据区中的目录数据区,将所有文件数据写入目标磁盘数据区中的文件数据区。
在本发明实施例中,在对数据区进行划分操作完成之后,将原先数据区中的数据进行分类存储,即将目录数据写入目录数据区,将文件数据写入文件数据区,完成分类存储的操作。
在步骤S104中,根据目录数据和文件数据的写入地址,更新文件***的两个文件分配表。
文件分配表是一个链表,用于标识文件数据的存放顺序,在写入目录数据和文件数据时,需要记录写的数据是哪个簇,更新文件分配表时需要把对应的簇链表填写完整。如:FAT16中一个文件有占用了两个簇,簇3、簇4,在文件分配表中就要在簇3位置填4标明下一个簇是簇4,簇4位置填0xffff0xff标 明这个链表的结尾。
图4示出了本发明第二实施例提供的文件***数据的管理方法的实现流程,其具体的步骤如下所述:
在步骤S201中,递归枚举源文件夹,计算所有文件夹和文件的目录及子目录数据需要的扇区总数。
在步骤S202中,根据所有文件夹和文件的目录数据需要的扇区总数将目标磁盘的数据区分成目录数据区与文件数据区,并获取文件数据区的扇区起始偏移地址信息。
在步骤S203中,计算所有文件数据需要的扇区总数。
在步骤S204中,将所有文件数据需要的扇区总数与文件数据区的扇区总数进行对比,判断所有文件数据需要的扇区总数是否大于文件数据区的扇区总数,是则执行步骤S205,否则执行步骤S206。
在步骤S205中,发出报警信息,提示源文件夹容量过大,目标磁盘容量不够存储源文件。
在步骤S206中,将所有目录及子目录数据写入目标磁盘数据区中的目录数据区,将所有文件数据写入目标磁盘数据区中的文件数据区。
在步骤S207中,根据目录数据和文件数据的写入地址,更新文件***的两个文件分配表。
上述仅为本发明的一个实施例,在此不再赘述,但不用以限制本发明。
作为本发明的一个具体实施例,如图5和6所示,分别与上述图1和图2形成鲜明的对比:
在图1中,没有进行区域划分的数据区,掺杂存放着目录及子目录数据和文件数据,其具体的存放可以参考图2所示,即目录数据和文件数据存放毫无规则,随机存放;
在图5中,通过本发明的实施方案,将目标磁盘的数据区划分为目录数据区和文件数据区,并将原先图1所示的数据区的数据分类存储到划分后的目录 数据区和文件数据区,对数据进行了归类存储,方便管理,其具体可参考图6所示的示意图,文件数据和目录数据分开存储,便于管理。
图7示出了本发明实施例提供的文件***数据的管理***的结构框图,为了便于说明,图中仅给出了与本发明实施例相关的部分,该文件***数据的管理***可以内置于存储器等硬件设备的软件单元或硬件单元。
扇区总数计算模块11递归枚举源文件夹,计算所有文件夹和文件的目录及子目录数据需要的扇区总数;数据区划分模块12根据所述扇区总数计算模块11计算得到的所有文件夹和文件的目录数据需要的扇区总数将目标磁盘的数据区分成目录数据区与文件数据区;扇区起始偏移地址信息获取模块13获取文件数据区的扇区起始偏移地址信息;根据所述数据区划分模块12对数据区的划分,写入模块14将所有目录及子目录数据写入目标磁盘数据区中的目录数据区,将所有文件数据写入目标磁盘数据区中的文件数据区;更新模块15根据目录数据和文件数据的写入地址,更新文件***的两个文件分配表。
作为本发明的一个实施例,文件数据扇区总数计算模块16计算所有文件数据需要的扇区总数;比对模块17将所述文件数据扇区总数计算模块计算得到的所有文件数据需要的扇区总数与文件数据区的扇区总数进行对比,判断所有文件数据需要的扇区总数是否大于文件数据区的扇区总数;若所有文件数据需要的扇区总数大于文件数据区的扇区总数,提示模块18发出报警信息,提示源文件夹容量过大,目标磁盘容量不够存储源文件;若所有文件数据需要的扇区总数小于或等于文件数据区的扇区总数,则执行所述写入模块14将所有目录及子目录数据写入目标磁盘数据区中的目录数据区,将所有文件数据写入目标磁盘数据区中的文件数据区的步骤。
其中,上述各模块的具体实施,如上述方法实施例所述,在此不再赘述,但不用以限制本发明。
在本发明实施例中,递归枚举源文件夹,计算所有文件夹和文件的目录及子目录数据需要的扇区总数;根据所有文件夹和文件的目录数据需要的扇区总 数将目标磁盘的数据区分成目录数据区与文件数据区,并获取文件数据区的扇区起始偏移地址信息;将所有目录及子目录数据写入目标磁盘数据区中的目录数据区,将所有文件数据写入目标磁盘数据区中的文件数据区;根据目录数据和文件数据的写入地址,更新文件***的两个文件分配表,从而实现将文件数据和目录数据分开存储,有效简化处理计算程序。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。