我不明白如何使用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 */
}之后,我想在我的液晶屏幕上列出这些文件名。我无法在根目录中获取文件名。我要把这些文件列在我的液晶显示器上。我不知道如何使用f_opendir(...)、f_readdir(...)等,如何正确地使用?
发布于 2022-02-08 19:59:33
首先定义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: %s\n", fno.fname); // Print File Name
} while(fno.fname[0] != 0);
f_closedir(&dir);此外,您还可以添加错误检查以保持一致,因此我使用自己的断言省略。
对于长文件名,必须将ffconf.h中的文件名ffconf.h设置为1。此外,您还需要声明缓冲区,例如TCHAR lfname[_MAX_LFN];。之后,在代码中分配缓冲区及其大小:
fno.lfname = lfname;
fno.lfsize = _MAX_LFN - 1;最后,您可以在上面提供的代码中用fname替换lfname。
https://stackoverflow.com/questions/69552076
复制相似问题