FileNameBuffer[ FileCount ].DirStartClust = CurrentDirStartClust; /* 记录当前目录的起始簇号,用于加快文件打开速度 */
RT,如何获取啊! 先谢谢各位了。
FileNameBuffer[ FileCount ].DirStartClust = CurrentDirStartClust; /* 记录当前目录的起始簇号,用于加快文件打开速度 */
RT,如何获取啊! 先谢谢各位了。
这个簇号一般是通过打开文件的时候获取,你使用的是哪款芯片?需要根据你的实际应用才能给你解释。
用的是CH376。问题是,在多级目录下的文件的短文件名已经知道(但是绝对路径不知道)。而且该文件当前处于打开状态。我能否通过某种方式得到该文件的长文件名?于是我提出了上面的那个问题。
望赐教。
问题也可以转化为:,在多级目录下的文件的短文件名已经知道(但是绝对路径不知道)。而且该文件当前处于打开状态。这种情况下我能否获取到该文件绝对路径,进而获取该文件的长文件名?如果该方法不行,还有其他方法获取到长文件名吗?
需要完整的路径才能获取长文件名,或者你可以去修改CH376GetLongName函数里面打开文件部分获取目录属性程序应该是可以通过相对路径来获取的。
真的可以吗?有人实现过吗?我也在尝试修改CH376GetLongName函数,但是比较难!
修改CH376GetLongName里面打开文件那个,其他不需要修改的。
谢谢hcn的回应,给我很大的帮助。 我看了CH376GetLongName函数后发现有两处要修改的: 1: s = CH376FileOpenPath( PathName ); /* 打开多级目录下的文件或者目录 */ 2: if ( GlobalBuf[33] == 0 ) { /* 当前的文件目录信息扇区处理结束,转到前一个扇区 */ s = CH376LocateInUpDir( PathName ); /* 在上级目录中移动文件指针到当前 文件目录信息所在的扇区 */ if ( s != USB_INT_SUCCESS ) break; if ( CH376ReadVar32( VAR_CURRENT_OFFSET ) == 0 ) { /* 当前已经处于目录扇区的开始,无法获取长文件名 */ s = ERR_LONG_NAME_ERR; break; } GlobalBuf[33] = DEF_SECTOR_SIZE / sizeof( FAT_DIR_INFO ); /* 指向前一个扇区的最后一个文件目录信息 */ } GlobalBuf[33] --; /* 从后向前搜索文件目录信息 */
其中第一处很容易修改,因为文件本身已经打开了,所以1处完成。 但是第二处修改涉及到该函数的调用: s = CH376LocateInUpDir( PathName );
这个函数牵扯到上一级目录的处理,很是复杂。 我在想这个函数会否不能修改了(在我所描述的情况里)。 hcn兄有经验吗?