在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 }