关于建立多级文件夹的疑问。

大家好: 在看例子时遇到一个想不通的地方,为什么要把上级目录的起始簇号写到新建目录的起始簇号中,举个例子,根目录下有个目录\ABC,下面已经有一个目录\01(内有文件若干),现在要新建另一个目录\02,可以把\ABC的起始簇号写给\02吗?

部分源码如下。 …… xWriteCH376Cmd( CMD14_READ_VAR32 ); xWriteCH376Data( VAR_START_CLUSTER ); /* 上级目录的起始簇号 */ for ( s = 0; s != 4; s ++ ) ClustBuf[ s ] = xReadCH376Data( ); xEndCH376Cmd( ); s = CH376DirCreate( &PathName[Name] ); /* 在当前目录下新建目录 */ if ( s != USB_INT_SUCCESS ) return( s ); s = CH376ByteLocate( sizeof(FAT_DIR_INFO) + STRUCT_OFFSET( FAT_DIR_INFO, DIR_FstClusHI ) ); /* 移动文件指针 */ if ( s != USB_INT_SUCCESS ) return( s ); s = CH376ByteWrite( &ClustBuf[2], 2, NULL ); /* 写入上级目录的起始簇号的高16位 */

……

这涉及到文件系统的相关内容,创建目录的时候会为该目录分配一个簇,在该簇的开头会分别记录该目录的当前簇号以及上级目录的簇号。


原来如此,我也查了资料: (1) 0--7字节 文件正名。 (2)8--10字节 文件扩展名。 (3)11字节 文件属性,按二进制位定义,最高两位保留未用,0至5位分别是只读位、隐藏位、系统位、卷标位、子目录位、归档位。 (4)11--13字节 仅长文件名目录项用,用来存储其对应的短文件名目录项的文件名字节校验和等。 (5)13--15字节 24位二进制的文件建立时间,其中的高5位为小时,次6位为分钟。 (6)16--17字节 16位二进制的文件建立日期,其中的高7位为相对于1980年的年份值,次4位为月份,后5位为月内日期。 (7)18--19字节 16位二进制的文件最新访问日期,定义同(6)。 (8)20--21字节 起始簇号的高16位。 (9)22--23字节 16位二进制的文件最新修改时间,其中的高5位为小时,次6位为分钟,后5位的二倍为秒数。 (10)24--25字节 16位二进制的文件最新修改日期,定义同(6)。 (11)26--27字节 起始簇号的低16位。 (12)28--31字节 32位的文件字节长度。

看来这(8)、(11)两项指的是上级目录的起始簇号。

多谢_study_。


只有登录才能回复,可以选择微信账号登录