买专利,只认龙图腾
首页 专利交易 科技果 科技人才 科技服务 商标交易 会员权益 IP管家助手 需求市场 关于龙图腾
 /  免费注册
到顶部 到底部
清空 搜索

【发明授权】一种基于NTFS和FAT32文件系统簇管理节省内存的方法_成都傲梅科技有限公司_201810858044.6 

申请/专利权人:成都傲梅科技有限公司

申请日:2018-07-31

公开(公告)日:2023-04-14

公开(公告)号:CN108984422B

主分类号:G06F12/02

分类号:G06F12/02;G06T1/60

优先权:

专利状态码:有效-授权

法律状态:2023.04.14#授权;2019.01.04#实质审查的生效;2018.12.11#公开

摘要:本发明公开了一种基于NTFS和FAT32文件系统簇管理节省内存的方法,其特征在于:包括如下步骤:步骤1,从文件系统中获取到位图总大小,然后将文件系统的位图按照固定大小分块读取到内存中;步骤2,读取成功后,将位图转换成数组,并逐个判断这个数组里面的元素的值;如果是NTFS文件系统则将位图转换成UINT64类型的数组,如果是FAT32文件系统则将位图转换成INT32的数组;步骤3,按照文件系统的类型作相应处理。本发明能够使得文件系统占用内存空间大大缩小,完全克服了采用传统方式直接在内存中创建一个内存位图表示,增大内存使用的开销的缺陷。

主权项:1.一种基于NTFS和FAT32文件系统簇管理节省内存的方法,其特征在于:包括如下步骤:步骤1,从文件系统中获取到位图总大小,然后将文件系统的位图按照固定大小分块读取到内存中;步骤2,读取成功后,将位图转换成数组,并逐个判断这个数组里面的元素的值;如果是NTFS文件系统则将位图转换成UINT64类型的数组,如果是FAT32文件系统则将位图转换成INT32的数组;步骤3,按照文件系统的类型作如下处理:文件系统为NTFS文件系统时分三种情况:a、元素的值=(UINT64)-1,则连续的簇数进行累加;b、元素的值=0,如果此元素之前存在连续的簇,则生成一条记录,如果此元素之前不存在连续的簇,则直接跳过,不作处理;c、元素的值不等于0,且不等于(UINT64)-1,则对这个元素进行逐位判断并进行记录;文件系统为FAT32文件系统时分两种情况:Ⅰ、元素的值不等于0则将计数器加1;Ⅱ、元素的值等于0,如果此元素之前存在使用的簇,则生成一条记录,如果此元素之前不存在使用的簇,则直接跳过,不作处理。

全文数据:一种基于NTFS和FAT32文件系统簇管理节省内存的方法技术领域[0001]本发明属于计算机磁盘分区领域,尤其涉及节省NTFS和FAT32文件系统簇管理占用内存的方法。背景技术[0002]随着计算机磁盘越来越大,文件系统的大小也随之变得更大,甚至有超过2TB的分区,那么此时文件系统的位图也会变得更大,如果使用传统方式直接在内存中创建一个内存位图表示,那么将会增大内存使用的开销,如果在计算机内存不充足时,那么将会导致操作失败甚至程序崩溃。发明内容[0003]鉴于上述缺陷,本发明提供了一种基于NTFS和FAT32文件系统簇管理节省内存的方法,通过该方法对NTFS和FAT32文件系统簇处理后,占用内存空间大大缩小,完全克服了采用传统方式直接在内存中创建一个内存位图表示,增大内存使用的开销的缺陷。[0004]为解决上述技术问题,本发明所采用的技术方案是:一种基于NTFS和FAT32文件系统簇管理节省内存的方法,其特征在于:包括如下步骤:步骤1,从文件系统中获取到位图总大小,然后将文件系统的位图按照固定大小分块读取到内存中;步骤2,读取成功后,将位图转换成数组,并逐个判断这个数组里面的元素的值;如果是NTFS文件系统则将位图转换成UINT64类型的数组,如果是FAT32文件系统则将位图转换成顶T32的数组;步骤3,按照文件系统的类型作如下处理:文件系统为NTFS文件系统时分三种情况:a、元素的值=UINT64-1,则连续的簇数进行累加;b、元素的值=0,如果此元素之前存在连续的簇,则生成一条记录,如果次元素之前不存在连续的簇,则直接跳过,不作处理;c、元素的值不等于0,且不等于UINT64-1,则对这个元素进行逐位判断并进行记录;文件系统为FAT32文件系统时分两种情况:I、元素的值不等于〇则将计数器加1;n、元素的值等于〇,如果此元素之前存在使用的簇,则生成一条记录,如果此元素之前不存在使用的簇,则直接跳过,不作处理。[00°5]a中,连续的簇数进行累加的方法具体为:连续的簇数加上这个块的簇数,记着:dwClusCount+=BitSize;BitSize指的是该元素所表示的簇数:BitSize=sizeofUINT64*8,表示64个簇。[0006]b中,元素的值=0则表示该元素中不包含任何簇,需要先判断dwClusCount是否等于〇以确保此元素之前是否存在连续的簇,如果dwClusCount等于0则表示该元素之前也没有连续的簇,则可以直接跳过不作处理,如果dwClusCoimt不等于0则表示该元素之前有连续的簇,需要将其记录成一条CLUSINF0记录。[0007]b中,CLUSINF0记录的具体记录方法如下:ClusInfo.Lcn=起始簇号;Cluslnfo.Count=dwClusCount;连续的簇数ClusList.push_backClusInfo;将该条记录存储在向量中记录完成后dwClusCount清0,起始簇号进行累加。[0008]c中,元素的值不等于0,且不等于UINT64-1则表示该元素所表示的64个簇存在不连续性,此时需要对这个元素进行逐位判断并进行记录,具体方法如下:1、将此UINT64类型的元素转换成BYTE类型的数组;2、逐一检查该数组元素的每一位是否为1,如果为1则表示该簇被占用。[0009]^中,具体算法如下:INT64ByteOffset=Bitlndex8;定位Bitlndex这个族在数组中位于哪个元素INT64BitOffset=Bitlndex%8;定位Bitlndex这个簇在数组中所在的偏移BYTEMask=BYTE1«BitOffset;if!m_pBuffer[ByteOffset]Maskm_pBuffer指的是不等于0且不等于-1的UINT64这个元素,此时己经被转换成BYTE类型的数组;{returnFALSE;}returnTRUE;如果返回TRUE则表示这位已经被占用,此时需要将dwClusCount加1,如果返回FALSE则表示到这位已经使用的簇已经不再连续,需要将之前连续的簇记录并形成一条记录,然后继续判断该UINTM的每一位,直致64位全部检查完毕,凡是遇到连续的就需要将dwClusCount加1,凡是遇到某位为0的情况就需要判断并形成一条记录。[0010]n中,元素的值等于0则表示该元素中不包含任何簇,需要先判断dwClusCount是否等于0以确保此元素之前是否存在使用的簇,如果dwClusCount等于0则表示该元素之前也没有使用的簇,则可以直接跳过不作处理,如果dwClusCount不等于0则表示该元素之前有使用的簇,需要将其记录成一条CLUSINF0记录。[0011]n中,具体记录方法如下:ClusInfo.Lcn=起始簇号;Cluslnfo.Count=dwClusCount;连续的元素个数ClusList.push_backClusInfo;将该条记录存储在向量中记录完成后dwClusCount清0,起始簇号进行累加。[0012]本发明相对于现有技术具有如下优点:本发明对NTFS和FAT32文件系统进行了处理,将位图中连续簇和起始簇转换成记录,并且跳过没有被使用的簇,将位图转换成了记录,一条记录仅仅需要12个字节大大缩小了内存占用量,相对于传统方式直接在内存中创建一个内存位图表示来讲,大大降低了内存使用的开销,在计算机内存不充足时,也不会会导致操作失败甚至程序崩溃。附图说明[0013]图1为NTFS文件系统的位图处理流程图;图2为FAT32文件系统位图处理流程图。具体实施方式[0014]下面结合实施例对本发明作进一步的描述,所描述的实施例仅仅是本发明一部分实施例,并不是全部的实施例。基于本发明中的实施例,本领域的普通技术人员在没有做出创造性劳动前提下所获得的其他所用实施例,都属于本发明的保护范围。[0015]一种基于NTFS和FAT32文件系统簇管理节省内存的方法,其特征在于:a、从文件系统中获取文件系统的位图总大小,将文件系统的位图按固定大小分块读取到内存中;b、完成a步骤之后,区分文件系统进行处理,文件系统为NTFS按照如下方式进行处理:将位图转换成UINT64类型的数组,逐个判断这个数组里面的元素;当元素的值等于(UINT64-1,对连续的簇数进行累加,记着:dwClusC〇unt+=BitSize;BitSize指的是该元素所表示的簇数:BitSize=sizeofUINT64*8,通常是表示64个簇;当该元素的值等于0则表示该元素中不包含任何簇,需要先判断dwClusCmmt是否等于〇以确保此元素之前是否存在连续的簇,如果dwClusCount等于0则表示该元素之前也没有连续的族,则可以直接跳过不作处理,如果dwClusCount不等于0则表示该元素之前有连续的簇,需要将其记录成一条CLUSINF0记录,具体记录方法如下:ClusInfo.Lcn=起始鏡号;Cluslnfo.Count=dwClusCount;连续的簇数ClusList.push_backClusInfo;将该条记录存储在向量中记录完成后dwClusCount清0,起始簇号进行累加;当元素的值既不等于〇又不等于UINT64-1则表示该元素所表示的64个簇存在不连续性,那么此时我们需要对这个元素进行逐位判断并进行记录,具体方法如下:1、将此UINT64类型的元素转换成BYTE类型的数组;2、逐一检查该数组元素的每一位是否为1,如果为1则表示该簇被占用,具体算法如下:INTMByteOffset=Bitlndex8;定位Bitlndex这个族在数组中位于哪个元素INTMBitOffset=Bitlndex%8;定位Bitlndex这个族在数组中所在的偏移BYTEMask=BYTE1«BitOffset;if!m—pBuffer[ByteOffset]Maskm—pBuffer指的是不等于〇且不等于-i的UINTM这个元素,此时已经被转换成BYTE类型的数组;{returnFALSE;}returnTRUE;如果返回TRUE则表示这位已经被占用,此时需要将dwClusCount加1,如果返回FALSE则表示到这位已经使用的饞已经不再连续,需要将之前连续的簇记录并形成一条记录,然后继续判断该UINT64类型的元素的每一位,直致64位全部检查完毕,凡是遇到连续的就需要将dwClusCount加1,凡是遇到某位为〇的情况就需要判断并形成一条记录;文件系统为FAT32按照如下方式进行处理:将位图转换成INT32的数组,并逐个判断这个数组里面的元素;当该元素的值不等于0则将计数器加1dwClusCount+=1,以表示该元素中存在己使用的簾;当元素的值等于0则表示该元素中不包含任何族,需要先判断dwClusCount是否等于0以确保此元素之前是否存在使用的簇,如果dwClusCount等于0则表示该元素之前也没有使用的簇,则可以直接跳过不作处理,如果dwClusCount不等于0则表示该元素之前有使用的族,需要将其记录成一条CLUSINF0记录,具体记录方法如下:ClusInfo.Lcn=起始簇号;Cluslnfo.Count=dwClusCount;连续的元素个数ClusList.push_backClusInfo;将该条记录存储在向量中记录完成后dwClusCount清0,起始族号进行累加。[0016]新型位图记录法的数据结构定义如下:typedefstructtagCLUSINFO{INT64Lcn;起始逻辑簇号DWORDCount;连续的簇的数目ICLUSINF0;举例说明:分析一个小于200兆的NTFS空分区,该分区每个簇占有用8个扇区的情况,使用新型存储方式与传统存储方式所占用的内存对比:如果使用传统位图方式记录NTFS的各个簇的占用情况则需要将该NTFS文件系统占用的55个扇区的位图保存在内存中,需要使用512*55=28160个字节,而使用新型的记录方式则仅需要5条记录60个字节的内存即可,相比传统方法节省内存开销469倍,5条记录分别是:[0]{Lcn=0Count=35}[1]{Lcn=44Count=1537}[2]{Lcn=7506Count=980}[3]{Lcn=8530Count=l}[4]{Lcn=8532Count=65}注:以上是举例说明,实际情况可能有所偏差。

权利要求:1.一种基于NTFS和FAT32文件系统簇管理节省内存的方法,其特征在于:包括如下乐骤:步骤1,从文件系统中获取到位图总大小,然后将文件系统的位图按照固定大小分块谏取到内存中;步骤2,读取成功后,将位图转换成数组,并逐个判断这个数组里面的元素的值;如果是NTFS文件系统则将位图转换成UINTM类型的数组,如果是FAT32文件系统则将位图转换成INT32的数组;步骤3,按照文件系统的类型作如下处理:文件系统为NTFS文件系统时分三种情况:a、元素的值=UINT64-1,则连续的簇数进行累加;b、元素的值=0,如果此元素之前存在连续的簇,则生成一条记录,如果次元素之前不存在连续的簇,则直接跳过,不作处理;c、元素的值不等于0,且不等于UINT64-1,则对这个元素进行逐位判断并进行记录;文件系统为FAT32文件系统时分两种情况:’1、元素的值不等于〇则将计数器加1;n、元素的值等于〇,如果此元素之前存在使用的簇,则生成一条记录,如果此元素之前不存在使用的簇,则直接跳过,不作处理。'2.根据权利要求1所述的一种基于NTFS和FAT32文件系统簇管理节省内存的方法,其特征在于:a中,连续的簇数进行累加的方法具体为:连续的簇数加上这个块的簇数,记着:dwClusCount+=BitSize;BitSize指的是该元素所表示的簇数:BitSize=SizecfUINT64*8,表示64个簇。3.根据权利要求1所述的一种基于NTFS和FAT32文件系统簇管理节省内存的方法,其特征在于:b中,元素的值=0则表示该元素中不包含任何簇,需要先判断dwClusCount是否等于〇以确保此元素之前是否存在连续的族,如果dwClusCount等于0则表示该元素之前也没有连续的簇,则可以直接跳过不作处理,如果dwClusCount不等于0则表示该元素之前有连续的簇,需要将其记录成一条CLUSINF0记录。4.根据权利要求3所述的一种基于NTFS和FAT32文件系统簇管理节省内存的方法,其特征在于:b中,CLUSINF0记录的具体记录方法如下:ClusInfo.Lcn=起始簇号;ClusInfo.Count=dwClusCount;连续的簇数ClusList.push_backClusInfo;将该条记录存储在向量中记录完成后dwClusCount清0,起始族号进行累加。5.根据权利要求1所述的一种基于NTFS和FAT32文件系统簇管理节省内存的方法,其特征在于:c中,元素的值不等于0,且不等于UINT64-1则表示该元素所表示的64个簇存在不连续性,此时需要对这个元素进行逐位判断并进行记录,具体方法如下:1、将此UINT64类型的元素转换成BYTE类型的数组;2、逐一检查该数组元素的每一位是否为1,如果为丨则表示该簇被占用。'6.根据权利要求5所述的一种基于NTFS和FAT32文件系统簇管理节省内存的方法,其特征在于:c中,具体算法如下:INT64ByteOffset=Bitlndex8;定位Bitlndex这个簇在数组中位于哪个元素INT64BitOffset=Bitlndex%8;定位Bitlndex这个簇在数组中所在的偏移BYTEMask=BYTE1«BitOffset;if!m_pBuffer[ByteOffset]Maskm_pBuffer指的是不等于0且不等于-1的UINT64这个元素,此时已经被转换成BYTE类型的数组;{returnFALSE;}returnTRUE;如果返回TRUE则表示这位已经被占用,此时需要将dwClusCount加1,如果返回FALSE则表示到这位已经使用的簇已经不再连续,需要将之前连续的簇记录并形成一条记录,然后继续判断该UINTM的每一位,直致64位全部检查完毕,凡是遇到连续的就需要将dwClusCount加1,凡是遇到某位为0的情况就需要判断并形成一条记录。7.根据权利要求1所述的一种基于NTFS和FAT32文件系统簇管理节省内存的方法,其特征在于:II中,元素的值等于0则表示该元素中不包含任何簇,需要先判断dwClusCount是否等于0以确保此元素之前是否存在使用的簇,如果dwClusCount等于0则表示该元素之前也没有使用的簇,则可以直接跳过不作处理,如果dwClusCount不等于0则表示该元素之前有使用的簇,需要将其记录成一条CLUSINF0记录。8.根据权利要求7所述的一种基于NTFS和FAT32文件系统簇管理节省内存的方法,其特征在于:n中,具体记录方法如下:ClusInfo.Lcn=起始簇号;Cluslnfo.Count=dwClusCount;连续的元素个数ClusList.push_backClusInfo;将该条记录存储在向量中记录完成后dwClusCount清0,起始簇号进行累加。

百度查询: 成都傲梅科技有限公司 一种基于NTFS和FAT32文件系统簇管理节省内存的方法

免责声明
1、本报告根据公开、合法渠道获得相关数据和信息,力求客观、公正,但并不保证数据的最终完整性和准确性。
2、报告中的分析和结论仅反映本公司于发布本报告当日的职业理解,仅供参考使用,不能作为本公司承担任何法律责任的依据或者凭证。

相关技术
相关技术
相关技术
相关技术