在Linux中,使用Glib库函数实现递归获取具有特定扩展名的文件

GLib中有许多有用的库函数,下面是我们就调用了一下其中的函数,递归搜索目录,获取我们所需要的具有特定扩展名的文件。

 

1 #include <glib.h>
2
3  int file_filter(gchar *dir_name,gchar * suffix)
4 {
5    if(!g_file_test(dir_name,G_FILE_TEST_IS_DIR)||g_file_test(dir_name,G_FILE_TEST_IS_SYMLINK))
6   {
7     g_printf("Abandoned!\n");
8      return 1;
9   }
10   GDir *dir;
11    if(!(dir = g_dir_open(dir_name,0,NULL)))
12   {
13     g_printf("Directory Opened Error!\n");
14     return 1;
15   }
16   gchar *abs_path = NULL;
17   const gchar *filename;
18   while(filename = g_dir_read_name(dir))
19   {
20     abs_path = g_strjoin("/",dir_name,filename,NULL);
21     if(g_file_test(abs_path,G_FILE_TEST_IS_DIR)&&!g_file_test(abs_path,G_FILE_TEST_IS_SYMLINK)) /*测试文件是否是目录*/
22     {
23       file_filter(abs_path,suffix);
24     }
25     else if(!g_file_test(abs_path,G_FILE_TEST_IS_SYMLINK)&&g_str_has_suffix(abs_path,suffix)) /*测试文件是否符合要求*/
26     {
27       g_printf("%s\n",abs_path);
28     }
29
30   }
31   g_dir_close(dir);
32   g_free(abs_path);
33 }
34
35 int main(int argc,char *argv[])
36 {
37   if(argc != 2)
38   {
39     g_printf("Parameters Error!\n");
40     return 1;
41   }
42   file_filter(argv[1],"c"); /*获取以c为后缀名的文件*/
43   return 0;
44  }
posted @ 2010-10-30 20:08  leao  阅读(1029)  评论(0编辑  收藏  举报