我不明白如何使用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
。