c -如何获得文件名使用fatf ?



我不明白如何使用FATFS在SD卡中获取文件名。我可以用下面的代码读取和写入.txt文件:

if (f_mount(&fatfs, SDPath, 1) == FR_OK) {
/* Write Test */
res = f_open(&file, (const TCHAR*)"TESTTEST.TXT", FA_WRITE | FA_CREATE_ALWAYS);
res = f_write(&file, txtWriteBuf, strlen((const char*)txtWriteBuf), &bytesW);
res = f_close(&file);
/* Read Test */
res = f_open(&file, (const TCHAR*)"TESTTEST.TXT", FA_READ);
res = f_read(&file, txtReadBuf, f_size(&file), &bytesR);
res = f_close(&file);
/* File Listing Code */
???
/* LCD Display Code */
...
/* My LCD Codes Here */
}

之后,我想在我的LCD屏幕上列出这些文件名。我卡在获得文件名在根目录。我想把这些文件列在我的液晶显示器上。我不知道如何使用f_opendir(...),f_readdir(...)等。怎么做才正确呢?

首先定义DIR和FILINFO结构:

DIR dir;                    // Directory
FILINFO fno;                // File Info

然后可以使用以下代码作为示例:

f_opendir(&dir, "/");   // Open Root
do
{
f_readdir(&dir, &fno);
if(fno.fname[0] != 0)
printf("File found: %sn", fno.fname); // Print File Name
} while(fno.fname[0] != 0);
f_closedir(&dir);

还可以添加错误检查以保持一致性,我使用自己的断言,因此省略。

对于长文件名ffconf.h中的_USE_LFN必须设置为1。此外,您需要声明缓冲区,例如TCHAR lfname[_MAX_LFN];。然后在代码中分配缓冲区及其大小:

fno.lfname = lfname;
fno.lfsize = _MAX_LFN - 1;

最后,您可以在上面提供的代码中用lfname替换fname

相关内容

  • 没有找到相关文章

最新更新