Skip to main content
FPicc.1
Associate III
Jan 22, 2024 8:02 PM UTC
Solved

How to count how many files exist in the SD card

Hy guys, I want to be able to create a named file in an SD card based on how many files I have in the directory, per example: if I have only 1 file "file1", I'll create the next one as "file2". 

I searched the ff.h library, but didn't find anything that seemed usefull. Has anyone know any ideas I might implement to make it work? 

Also alternatively, is there a function that reads or compares the name of the file and then create another file with a different name?

This topic has been closed for replies.
FPicc.1
FPicc.1Best answer
Associate III
Feb 2, 2024 8:20 PM UTC

IT WORKED,

I added a line to break:

//Count the files in SD and create a new one
  res = f_opendir(&dir, "/");
  if(res==FR_OK)
  {
  for(;;)
  {
    res_dir = f_readdir(&dir, &filinfo);
  if((res_dir==FR_OK)&&(filinfo.fname[0]!= 0))
  {
  file_number++;
  }
  if (res_dir != FR_OK || filinfo.fname[0] == 0) break;
  }
  }
  f_closedir(&dir);
  sprintf(file_name, "file%d.csv", file_number);
 
//Open file to read / create it if it doesn't exist
  fresult = f_open(&fil, file_name, FA_OPEN_ALWAYS | FA_WRITE);
 
Thanks @Tesla DeLorean 

9 replies

AScha.3
Super User
Jan 22, 2024 8:18 PM UTC

Hi,

Just read the filenames (++ a counter) until end of dir , then you know how many files in this dir .

(I tested : f_readdir needs about 0,5..1ms , so for 30 files need about 30ms .)

Then make a string with "fileX" (X = ++counter) and open file with this new name, thats it.

.

If you feel a post has answered your question, please click on " Best Answer ".
FPicc.1
FPicc.1Author
Associate III
Feb 2, 2024 5:44 PM UTC

Hi @AScha.3 

I've writed the code to do it, it creates a file"0", even tho there already have a file in the SD. But it doesn't create another one, it keeps updating the file0. Here's the code: 

 

//Count the files in SD and create a new one
  res_dir = f_readdir(&dir, &filinfo);
  if((res_dir==FR_OK)&&(filinfo.fname[0]!= 0))
  {
  file_number++;
  }
  sprintf(file_name, "file%d.csv", file_number);
 
//Open file to read / create it if it doesn't exist
  fresult = f_open(&fil, file_name, FA_OPEN_ALWAYS | FA_WRITE);
 
Have you noticed something or see anything wrong?
Tesla DeLorean
Guru
Feb 2, 2024 6:01 PM UTC

Does it count files?

What error does f_open() return?

I cited specific code showing how to count files / directories on a specific path.

It's not hard to corrupt the file system if writing fails or if you lose power, etc.

Tips, Buy me a coffee, or three.. PayPal Venmo (See Profile) Up vote any posts that you find helpful, it shows what's working..
Tesla DeLorean
Guru
Jan 22, 2024 8:29 PM UTC

FatFs is designed to be small, there's not specific function to count files, not that I recall one in STDIO or WIN32 either..

Enumerate files via f_opendir() / f_readdir(), filter out directories, and perhaps count FILExxxx.TXT files, or search for largest used case, and increment to the next.

 

http://elm-chan.org/fsw/ff/doc/readdir.html

Tips, Buy me a coffee, or three.. PayPal Venmo (See Profile) Up vote any posts that you find helpful, it shows what's working..