Linux 下读取指定目录下所有的目录与文件并依字母顺序

代码如下:
#include <dirent.h>
#include <stdio.h>

// 自定义的过滤器函数
// 本函数只能做为 scandir 函数的参数,被 scandir 函数回调
// 注:1. 本函数不能被定义为 static int custom_filter( const struct dirent *pSDirent ) 静态函数;
//   2. 参数一定要为 const struct dirent *pSDirent 不可省略前面的 const ;
int
custom_filter( const struct dirent *dp )
{
    if ( 0 == strncmp( "get",
                       dp->d_name,
                       3 ) )
    {
        // 非零为保留 - 不滤掉
        return 1;
    }
  
    // 零为过滤掉 - 过滤掉
    return 0;
  }   
 
void main()
{
    struct dirent **namelist;
    int i;
    int total;
  
    total = scandir( "./",
                     &namelist,
                     custom_filter,
                     alphasort );
                    
    if ( total < 0 )
    {
        printf( "scandir fault\n" );
    }
    else
    {
        for( i = 0;
             i < total;
             i++ )
        {
            printf( "%s\n",
                    namelist[i]->d_name );
        }
      
        printf( "total = %d\n",
                total );
    }
}

结果如下:
不加 custom_filter 过滤函数的情况
    total = scandir( "./",
                     &namelist,
                     0,
                     alphasort );
linuxidc@linuxidc-Ubuntu:/media/TestSrc$ ./getselfname
.
..
getselfname
getselfname.c
total = 4

加了 custom_filter 过滤函数的情况
    total = scandir( "./",
                     &namelist,
                     custom_filter,
                     alphasort );
linuxidc@linuxidc-Ubuntu:/media/TestSrc$ ./getselfname
getselfname
getselfname.c
total = 2

相关推荐