2010-11-13 8 views
1

J'essaie d'apprendre glib/gtk. J'ai écrit peu de code qui imprime des fichiers dans le répertoire et assigne "f" si ce sont des fichiers normaux ou "d" s'ils sont des répertoires. Le problème est avec si. Il obtient toujours une fausse valeur et ajoute "f" au nom du fichier.Problème avec g_file_test dans glib

#include <glib.h> 
#include <glib/gstdio.h> 
#include <glib/gprintf.h> 

int main() 
{ 
    GDir* home = NULL; 
    GError* error = NULL; 
    gchar* file = "a"; 

    home = g_dir_open("/home/stamp", 0, &error); 
    while (file != NULL) 
    { 
     file = g_dir_read_name(home); 
     if (g_file_test(file, G_FILE_TEST_IS_DIR)) 
     { 
      g_printf("%s: d\n", file); 
     } else { 
      g_printf("%s: f\n", file); 
     } 
    } 
} 

Répondre

3

g_dir_read_name renvoie simplement le nom du répertoire/fichier. Vous devez créer le chemin d'accès complet afin de le tester en utilisant g_file_test. Vous pouvez utiliser g_build_filename pour cela.

int main() 
{ 
    GDir* home = NULL; 
    GError* error = NULL; 
    gchar* file = "a"; 

    home = g_dir_open("/home/stamp", 0, &error); 
    while (file != NULL) 
    { 
     file = g_dir_read_name(home); 

     gchar* fileWithFullPath; 
     fileWithFullPath = g_build_filename("/home/stamp", file, (gchar*)NULL); 
     if (g_file_test(fileWithFullPath, G_FILE_TEST_IS_DIR)) 
     { 
      g_printf("%s: d\n", file); 
     } 
     else 
     { 
      g_printf("%s: f\n", file); 
     } 
     g_free(fileWithFullPath); 
    } 
    g_dir_close(home); 
}
+0

merci cela a fonctionné – GeekDaddy

+1

N'oubliez pas 'g_free (fileWithFullPath);'. –

+0

@mu est trop court, merci! – swatkat