SD Fat Find parent folder help
i'm looking make function uses [sdfat library](https://github.com/greiman/sdfat) browse next file in sd card. when finds folder, opens folder , reads contents in lexicographic order , then, after finishes folder, should reopen folder's parent directory , continue on.
(equivalent to `[fatfile].ls(&serial, ls_r);` except stopping @ each file)
right function looks this:
**init steps**
*pass in `disp` file name out lcd
*pass in `movement` may want go `n` files forward in future
*then open next file in global var `sdfat dirfile` (the sd card's current active folder)
(if opennext==false, `browsefile` may either subdirectory or @ end of folder) ->test determine accordingly:
if browsefile subdirectory, set `dirfile` `browsefile` , read 1st file
----------
here's i'm having toubble
this element of function supposed determine parent folder of `dirfile`, open parent, set `dirfile=[parent]`, , open `browsefile` @ `dirfile`'s index in parent folder +1. however, seems closing , reopening `dirfile`.
----------
if `browsefile.opennext(&dirfile, o_rdonly)==false` andneither `browsefile` nor `dirfile` sub directories, follows `browsefile` has reached end of root directory. function closes `browsefile` , `dirfile` , reopens `dirfile` @ root restart top.
if `browsefile.opennext(&dirfile, o_rdonly)==true`, double check make sure file , not hidden. then, if there's .csv extension, decrement `movement` , if `movement--=0` feed `disp`.....
----------
i'm relatively new working computer file structures @ level, there may i'm missing. please let me know if there i'm missing or if there's can better within code itself.
(equivalent to `[fatfile].ls(&serial, ls_r);` except stopping @ each file)
right function looks this:
**init steps**
*pass in `disp` file name out lcd
*pass in `movement` may want go `n` files forward in future
*then open next file in global var `sdfat dirfile` (the sd card's current active folder)
code: [select]
char sdbrowse (char *disp, int movement)
{
char sfn[13]; //shrot file name allocation space check .csv extension
fatfile browsefile; //allocation next fatfile
while(movement>0)
{
if(!browsefile.opennext(&dirfile, o_rdonly))
{
(if opennext==false, `browsefile` may either subdirectory or @ end of folder) ->test determine accordingly:
if browsefile subdirectory, set `dirfile` `browsefile` , read 1st file
code: [select]
if(browsefile.issubdir())
{
browsefile.open(&dirfile,browsefile.dirindex(), o_read);
dirfile=browsefile;
browsefile.close();
browsefile.opennext(&dirfile, o_read);
serial.print("sub ->"); //debug
dirfile.printname(&serial); //debug
serial.println(); //debug
}
----------
here's i'm having toubble
this element of function supposed determine parent folder of `dirfile`, open parent, set `dirfile=[parent]`, , open `browsefile` @ `dirfile`'s index in parent folder +1. however, seems closing , reopening `dirfile`.
code: [select]
else if(dirfile.issubdir())
{
uint16_t dirpos=dirfile.dirindex();
sdfile *parentdir;
browsefile.close();
//open parent
parentdir=dirfile.cwd();
//parentdir.open(dirfile.cwd(),"/",o_read);
//move dirfile up
dirfile.close();
dirfile.setcwd(parentdir);
//parentdir.close();
//reopen browse @ dir+1
browsefile.open(&dirfile,dirpos+1, o_read);
serial.print("up ->"); //debug
dirfile.printname(&serial); //debug
serial.println(" new parent"); //debug
}
----------
if `browsefile.opennext(&dirfile, o_rdonly)==false` andneither `browsefile` nor `dirfile` sub directories, follows `browsefile` has reached end of root directory. function closes `browsefile` , `dirfile` , reopens `dirfile` @ root restart top.
code: [select]
else
{
browsefile.close();
dirfile.close();
dirfile.open("/",o_read);
serial.println("reset"); //debug
}
} //end of if(!browsefile.opennext(&dirfile, o_rdonly)) statement
if `browsefile.opennext(&dirfile, o_rdonly)==true`, double check make sure file , not hidden. then, if there's .csv extension, decrement `movement` , if `movement--=0` feed `disp`.....
code: [select]
else if(browsefile.isfile()&& !browsefile.ishidden())
{
browsefile.getsfn(&*sfn);
if(strstr(sfn,".csv") != null)
{
browsefile.printname(&serial); //debug
serial.println(); //debug
movement--;
if(movement=0){browsefile.getname(disp,17);}
}
}
}
}
----------
i'm relatively new working computer file structures @ level, there may i'm missing. please let me know if there i'm missing or if there's can better within code itself.
in post #4 of thread in french attached code goes recursively through files hierarchy
that give ideas (some comments in french code code)
printing files sorted alphabetically @ given level require buffer , sort eat memory
that give ideas (some comments in french code code)
printing files sorted alphabetically @ given level require buffer , sort eat memory
Arduino Forum > Using Arduino > Programming Questions > SD Fat Find parent folder help
arduino
Comments
Post a Comment