发现fs_open 大小写文件名都可以,怎么回事?
断点跟踪一下,先进入 dir_find,
然后,
/* Check validity of the LFN entry and compare it with given name */
ord = (c == ord && sum == dp->dir[LDIR_Chksum] && cmp_lfn(fs->lfnbuf, dp->dir)) ? ord - 1 : 0xFF;
然后在 cmp_lfn 里面有 if (i >= FF_MAX_LFN + 1 || ff_wtoupper(uc) != ff_wtoupper(lfnbuf[i++])) { /* Compare it */
进入wtoupper函数,里面有:
switch (cmd) {
case 0: uc = p[uc - bc]; break; /* Table conversion */
case 1: uc -= (uc - bc) & 1; break; /* Case pairs */
case 2: uc -= 16; break; /* Shift -16 */
case 3: uc -= 32; break; /* Shift -32 */
case 4: uc -= 48; break; /* Shift -48 */
case 5: uc -= 26; break; /* Shift -26 */
case 6: uc += 8; break; /* Shift +8 */
case 7: uc -= 80; break; /* Shift -80 */
case 8: uc -= 0x1C60; break; /* Shift -0x1C60 */
于是写个验证一下:
int a1 = 0;
int b1 = 0;
a1 = ff_wtoupper('e');
b1 = ff_wtoupper('E');
发现 a1 和 b1都等于69 就是 69就是‘E’,所以结论出来了:文件名打开不分大小写。
另外,注意文件名的搜索过程,文件越多,打开文件越慢。