Search code examples
cstringcomparesd-cardfatfs

Fatfs string comparison for fno.fname


I have an issue regarding reading the size of a file on my SD card. The sizes of these files will vary in the application, I therefore, need to get the size of the file. If I run the below code I can see the files in my directory along with their size.

What I need to do is store the size of the DATA.CSV file as a variable. How do I add a comparision to get the fno.fsize when the listing is "data.csv

This prints out:

00>  Listing directory: /00>         0  EVENTLOG.CSV   <DIR>   SYSTEM~1   183600  DATA.CSV ```
void Get_data_csv_file_size()//of the data csv
{
   if(Logging_UART_SD_CARD == true){NRF_LOG_INFO("\r\n Listing directory: /");}
    ff_result = f_opendir(&dir, "/");
    if (ff_result)
    {
        if(Logging_UART_SD_CARD == true){NRF_LOG_INFO("Directory listing failed!");}
    }
    do
    {
        ff_result = f_readdir(&dir, &fno);
        if (ff_result != FR_OK)
        {
            if(Logging_UART_SD_CARD == true){NRF_LOG_INFO("Directory read failed.");}
        }
        if (fno.fname[0])
        {
            if (fno.fattrib & AM_DIR)
            {
                if(Logging_UART_SD_CARD == true){NRF_LOG_RAW_INFO("   <DIR>   %s",(uint32_t)fno.fname);}
            }
            else
            {
                if(Logging_UART_SD_CARD == true){NRF_LOG_RAW_INFO("%9lu  %s", fno.fsize, (uint32_t)fno.fname);}

                if(strcmp((uint32_t)fno.fname, "data.csv")==0)//Convert both to a uint32_t
                {
                    Size_of_file = fno.fsize;//Set the size of the file
                    //Does not get to here
                }
            }
        }
    }
    while (fno.fname[0]);
}


Note this is programmed in C using a arm board. What operation do I need to do so I can get the file size?

I want something like:

   if(fno.name == "data.csv")
   {
       Size_of_file = fno.fsize;//Set the size of the file
   }

Solution

  • Found a solution using snprintf neeeded to convert fno.fname to a string to compare the result.

    char string_test[9] = "DATA.CSV";
    char name_test[9]={0};
    snprintf(name_test, sizeof(name_test),"%s",(uint32_t)fno.fname);
    NRF_LOG_INFO("Result is: %s",name_test); 
    int result = strcmp(name_test, string_test);
    if(result==0)//Convert both to a uint32_t
    {
        Size_of_file = fno.fsize;//Set the size of the file
        NRF_LOG_INFO("Size of file using is: %9lu",Size_of_file);
    }