2015-07-08 15:39:24 +00:00
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
< html lang = "en" >
< head >
< meta http-equiv = "Content-Type" content = "text/html; charset=iso-8859-1" >
< meta http-equiv = "Content-Style-Type" content = "text/css" >
< link rel = "up" title = "FatFs" href = "../00index_e.html" >
< link rel = "alternate" hreflang = "ja" title = "Japanese" href = "../ja/readdir.html" >
< link rel = "stylesheet" href = "../css_e.css" type = "text/css" media = "screen" title = "ELM Default" >
< title > FatFs - f_readdir< / title >
< / head >
< body >
< div class = "para func" >
< h2 > f_readdir< / h2 >
2016-07-29 06:06:21 +00:00
< p > The f_readdir function reads an item of the directory.< / p >
2015-07-08 15:39:24 +00:00
< pre >
FRESULT f_readdir (
DIR* < span class = "arg" > dp< / span > , < span class = "c" > /* [IN] Directory object */< / span >
FILINFO* < span class = "arg" > fno< / span > < span class = "c" > /* [OUT] File information structure */< / span >
);
< / pre >
< / div >
< div class = "para arg" >
< h4 > Parameters< / h4 >
< dl class = "par" >
< dt > dp< / dt >
2016-07-29 06:06:21 +00:00
< dd > Pointer to the open directory object or null pointer.< / dd >
2015-07-08 15:39:24 +00:00
< dt > fno< / dt >
2016-07-29 06:06:21 +00:00
< dd > Pointer to the < a href = "sfileinfo.html" > file information structure< / a > to store the information about read item.< / dd >
2015-07-08 15:39:24 +00:00
< / dl >
< / div >
< div class = "para ret" >
< h4 > Return Values< / h4 >
< p >
< a href = "rc.html#ok" > FR_OK< / a > ,
< a href = "rc.html#de" > FR_DISK_ERR< / a > ,
< a href = "rc.html#ie" > FR_INT_ERR< / a > ,
< a href = "rc.html#io" > FR_INVALID_OBJECT< / a > ,
< a href = "rc.html#tm" > FR_TIMEOUT< / a > ,
< a href = "rc.html#nc" > FR_NOT_ENOUGH_CORE< / a >
< / p >
< / div >
< div class = "para desc" >
< h4 > Description< / h4 >
2016-07-29 06:06:21 +00:00
< p > The < tt > f_readdir< / tt > function reads a directory item, informations about the object. All items in the directory can be read in sequence by < tt > f_readdir< / tt > function calls. Dot entries (< tt > "."< / tt > and < tt > ".."< / tt > ) in the sub-directory are filtered out and they will never appear in the read items. When all directory items have been read and no item to read, a nul string is stored into the < tt > fno-> fname[]< / tt > without any error. When a null pointer is given to the < tt class = "arg" > fno< / tt > , the read index of the directory object is rewinded.< / p >
< p > When support of long file name (LFN) is enabled, a member < tt > altname[]< / tt > is defined in the file information structure to store the short file name of the object. In case of the some conditions listed below, short file name is stored into the < tt > fname[]< / tt > and < tt > altname[]< / tt > has a null string.< / p >
2015-07-08 15:39:24 +00:00
< ul >
2016-07-29 06:06:21 +00:00
< li > The item has no long file name. (Not the case at exFAT volume)< / li >
< li > Setting of < tt > _MAX_LFN< / tt > is insufficient for the long file name. (Not the case at < tt > _MAX_LFN == 255< / tt > )< / li >
< li > The long file name contains any character not allowed in ANSI/OEM code. (Not the case at < tt > _LFN_UNICODE == 1< / tt > )< / li >
2015-07-08 15:39:24 +00:00
< / ul >
2016-07-29 06:06:21 +00:00
< p > There is a problem on reading a directory of exFAT volume. The exFAT does not support short file name. This means no name can be returned on the condition above. If it is the case, a "?" is returned as file name to indicate that the object is not accessible. To avoid this problem, configure FatFs < tt > _LFN_UNICODE = 1< / tt > and < tt > _MAX_LFN = 255< / tt > to support the full feature of LFN specification.< / p >
2015-07-08 15:39:24 +00:00
< / div >
< div class = "para comp" >
< h4 > QuickInfo< / h4 >
< p > Available when < tt > _FS_MINIMIZE < = 1< / tt > .< / p >
< / div >
< div class = "para use" >
< h4 > Sample Code< / h4 >
< pre >
FRESULT scan_files (
2016-07-29 06:06:21 +00:00
char* path < span class = "c" > /* Start node to be scanned (***also used as work area***) */< / span >
2015-07-08 15:39:24 +00:00
)
{
FRESULT res;
DIR dir;
2016-07-29 06:06:21 +00:00
UINT i;
static FILINFO fno;
2015-07-08 15:39:24 +00:00
res = f_opendir(& dir, path); < span class = "c" > /* Open the directory */< / span >
if (res == FR_OK) {
for (;;) {
res = f_readdir(& dir, & fno); < span class = "c" > /* Read a directory item */< / span >
if (res != FR_OK || fno.fname[0] == 0) break; < span class = "c" > /* Break on error or end of dir */< / span >
if (fno.fattrib & AM_DIR) { < span class = "c" > /* It is a directory */< / span >
2016-07-29 06:06:21 +00:00
i = strlen(path);
sprintf(& path[i], "/%s", fno.fname);
res = scan_files(path); < span class = "c" > /* Enter the directory */< / span >
2015-07-08 15:39:24 +00:00
if (res != FR_OK) break;
2016-07-29 06:06:21 +00:00
path[i] = 0;
2015-07-08 15:39:24 +00:00
} else { < span class = "c" > /* It is a file. */< / span >
2016-07-29 06:06:21 +00:00
printf("%s/%s\n", path, fno.fname);
2015-07-08 15:39:24 +00:00
}
}
f_closedir(& dir)
}
return res;
}
2016-07-29 06:06:21 +00:00
int main (void)
{
FATFS fs;
FRESULT res;
char buff[256];
res = f_mount(& fs, "", 1);
if (res == FR_OK) {
strcpy(buff, "/");
res = scan_files(buff);
}
return res;
}
2015-07-08 15:39:24 +00:00
< / pre >
< / div >
< div class = "para ref" >
< h4 > See Also< / h4 >
< p > < tt > < a href = "opendir.html" > f_opendir< / a > , < a href = "closedir.html" > f_closedir< / a > , < a href = "stat.html" > f_stat< / a > , < a href = "sfileinfo.html" > FILINFO< / a > , < a href = "sdir.html" > DIR< / a > < / tt > < / p >
< / div >
< p class = "foot" > < a href = "../00index_e.html" > Return< / a > < / p >
< / body >
< / html >