hello, i am working with the MFS in MQX with sdcard. the file system will install on the sdcard. open a mytext.csv file and write on it. now the above code is success fully working. i could log all related data in hot plug n play sdcard. Now with my next requirement in it is, i have to delete all the files (temp, *.*) in the sdcard except the "mytext.csv". i am not able to find proper approch or command in mfs library or MQXMFSUG.pdf file. can any one please give me suggestion that how can i achieve this condition. please help in regards, Regards, Swapnil K.
Solved! Go to Solution.
List all files and subdirectories in a directory.
MFS_SEARCH_DATA search_data;
MFS_SEARCH_PARAM search;
char filepath = “*.*”;
search.ATTRIBUTE = MFS_SEARCH_ANY;
search.WILDCARD = filepath;
search.SEARCH_DATA_PTR = &search_data;
error_code = ioctl(mfs_fd_ptr, IO_IOCTL_FIND_FIRST_FILE, (uint_32_ptr) &search);
while (error_code == MFS_NO_ERROR)
{
printf ("%-12.12s %6lu %02lu-%02lu-%04lu %02lu:%02lu:%02lu\n", search_data.NAME, search_data.FILE_SIZE,
(uint_32)(search_data.DATE & MFS_MASK_MONTH) >>MFS_SHIFT_MONTH,
(uint_32)(search_data.DATE & MFS_MASK_DAY) >> MFS_SHIFT_DAY,
(uint_32)((search_data.DATE & MFS_MASK_YEAR) >> MFS_SHIFT_YEAR) + 1980,
(uint_32)(search_data.TIME & MFS_MASK_HOURS) >> MFS_SHIFT_HOURS,
(uint_32)(search_data.TIME & MFS_MASK_MINUTES) >> MFS_SHIFT_MINUTES,
(uint_32)(search_data.TIME & MFS_MASK_SECONDS) << 1);
error_code = ioctl(mfs_fd_ptr, IO_IOCTL_FIND_NEXT_FILE, (uint_32_ptr) &search_data);
}
I don't know if this is possible for you, but you could simply load the file "MyText.csv" into RAM (depending on it's size of course), format the SD Card and then re-write the file. You are going to need to recursively search through all directories, removing all files and sub directories otherwise.
I am pretty sure the recursive method also will not reclaim space of files that might have been left open when power was removed.
I think you should use the ioctl function with IO_IOCTL_FIND_FIRST_FILE,IO_IOCTL_FIND_NEXT_FILE used as I/O control command for getting list of files, and with IO_IOCTL_DELETE_FILE for deleting files.
is there any example which i can refer. a simple *.* search with which i can understand the working of the IO_IOCTL_FIND_FIRST_FILE,IO_IOCTL_FIND_NEXT_FILE . basically my dought is how will i get the path name of all files, which is required by the IO_IOCTL_DELETE_FILE as third parameter in ioclt function
List all files and subdirectories in a directory.
MFS_SEARCH_DATA search_data;
MFS_SEARCH_PARAM search;
char filepath = “*.*”;
search.ATTRIBUTE = MFS_SEARCH_ANY;
search.WILDCARD = filepath;
search.SEARCH_DATA_PTR = &search_data;
error_code = ioctl(mfs_fd_ptr, IO_IOCTL_FIND_FIRST_FILE, (uint_32_ptr) &search);
while (error_code == MFS_NO_ERROR)
{
printf ("%-12.12s %6lu %02lu-%02lu-%04lu %02lu:%02lu:%02lu\n", search_data.NAME, search_data.FILE_SIZE,
(uint_32)(search_data.DATE & MFS_MASK_MONTH) >>MFS_SHIFT_MONTH,
(uint_32)(search_data.DATE & MFS_MASK_DAY) >> MFS_SHIFT_DAY,
(uint_32)((search_data.DATE & MFS_MASK_YEAR) >> MFS_SHIFT_YEAR) + 1980,
(uint_32)(search_data.TIME & MFS_MASK_HOURS) >> MFS_SHIFT_HOURS,
(uint_32)(search_data.TIME & MFS_MASK_MINUTES) >> MFS_SHIFT_MINUTES,
(uint_32)(search_data.TIME & MFS_MASK_SECONDS) << 1);
error_code = ioctl(mfs_fd_ptr, IO_IOCTL_FIND_NEXT_FILE, (uint_32_ptr) &search_data);
}
Hi,
I am new in mqx Can u plaz tell what is "mfs_fd_ptr" ??
my device is "ram" and installed mfs is "a:", which shd be open using fopen() before using example present in mqs to search all files
plz reply
please go through the C:\Program Files\Freescale\Freescale MQX 3.8\mfs\examples\ramdisk example will state you how to install file system on RAM (0x2000) space and use it as a drive. u can then use normal file handling API to create, delete, read, write in a file.
thanks Martin with little addition i could make it work for my logic. but the problem i am facing is only files are getting deleted not the folders. please suggest me how can i do that...
you first need to delete all the files within the folder, and then use ioctrl with IO_IOCTL_REMOVE_SUBDIR command