FRESULT listFiles(const TCHAR* path);
FRESULT findFiles(const TCHAR* path, const TCHAR* ext);
FRESULT findFile(const char *path, const char *ext, char *foundFile);
//listFiles("/");
FRESULT listFiles(const TCHAR* path) {
DIR dir;
FILINFO fileInfo;
FRESULT res;
// Open directory
res = f_opendir(&dir, path);
if (res != FR_OK) {
return res;
}
// Traverse directory
while (1) {
// Read directory entry
res = f_readdir(&dir, &fileInfo);
if (res != FR_OK || fileInfo.fname[0] == 0) {
// End of directory or error, break loop
break;
}
// Ignore hidden files and directories
if (fileInfo.fattrib & AM_HID) {
continue;
}
// Print file name
if (fileInfo.fattrib & AM_DIR) {
// Directory
printf("[%s]\r\n", fileInfo.fname);
} else {
// File
printf("%s\r\n", fileInfo.fname);
}
}
// Close directory
f_closedir(&dir);
return FR_OK;
}
// Find files with .bin extension in the root directory
// findFiles("/", "bin");
FRESULT findFiles(const TCHAR* path, const TCHAR* ext)
{
DIR dir;
FILINFO fileInfo;
FRESULT res;
int len=0;
// Open directory
res = f_opendir(&dir, path);
if (res != FR_OK) {
return res;
}
// Traverse directory
while (1) {
// Read directory entry
res = f_readdir(&dir, &fileInfo);
if (res != FR_OK || fileInfo.fname[0] == 0) {
// End of directory or error, break loop
break;
}
// Ignore hidden files and directories
if (fileInfo.fattrib & AM_HID) {
continue;
}
printf("%s;%d;\n",fileInfo.fname,strlen(fileInfo.fname));
printf("%s;%d;\n",fileInfo.fname,sizeof(fileInfo.fname));
printf("ext:%s;%d;\n",ext,strlen(ext));
// Check file extension
//if (fileInfo.fattrib & AM_ARC && strcmp(fileInfo.fname + strlen(fileInfo.fname) - 3, ext) == 0)
len = strlen(fileInfo.fname);
if (len >= 4 && strcasecmp(fileInfo.fname + len - 4, ext) == 0)
{
// Print file name
printf("%s\r\n", fileInfo.fname);
}
}
// Close directory
f_closedir(&dir);
return FR_OK;
}
void openFile(const TCHAR* path) {
FIL file;
FRESULT res;
res = f_open(&file, path, FA_READ);
if (res == FR_OK) {
// open success
// ...
f_close(&file);
} else {
// open false
// ...
}
}
FRESULT findFile(const TCHAR* path, const TCHAR* ext, TCHAR* foundFile) {
DIR dir;
FILINFO fileInfo;
FRESULT res;
int len=0;
// Open directory
res = f_opendir(&dir, path);
if (res != FR_OK) {
return res;
}
// Traverse directory
while (1) {
// Read directory entry
res = f_readdir(&dir, &fileInfo);
if (res != FR_OK || fileInfo.fname[0] == 0) {
// End of directory or error, break loop
break;
}
// Ignore hidden files and directories
if (fileInfo.fattrib & AM_HID) {
continue;
}
printf("%s;%d;\n",fileInfo.fname,strlen(fileInfo.fname));
printf("%s;%d;\n",fileInfo.fname,sizeof(fileInfo.fname));
// Check file extension
//if (fileInfo.fattrib & AM_ARC && strcmp(fileInfo.fname + strlen(fileInfo.fname) - 3, ext) == 0)
len = strlen(fileInfo.fname);
if (len >= 4 && strcasecmp(fileInfo.fname + len - 4, ext) == 0)
{
// Print file name
printf("%s\r\n", fileInfo.fname);
strncpy(foundFile, fileInfo.fname, sizeof(fileInfo.fname));
foundFile[sizeof(fileInfo.fname) - 1] = '\0';
}
}
// Close directory
f_closedir(&dir);
return FR_OK;
}
int main() {
// ...
// findFiles("/", ".bin");
TCHAR foundFile[13]; // 存储找到的文件名,假设文件名不超过 12 个字符
FRESULT res = findFile("/", ".bin", foundFile);
if (res == FR_OK) {
openFile(foundFile);
} else {
// 文件查找失败
// 处理错误情况
}
// ...
return 0;
}