Проблема с g_file_test в glib - PullRequest
       27

Проблема с g_file_test в glib

1 голос
/ 14 ноября 2010

Я пытаюсь выучить glib / gtk.Я написал небольшой код, который печатает файлы в каталоге и назначает «f», если они являются обычными файлами, или «d», если они являются каталогом.Проблема в том, если.Он всегда получает ложное значение и добавляет «f» к имени файла.

#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);
        }
    }
}

1 Ответ

3 голосов
/ 14 ноября 2010

g_dir_read_name возвращает только имя каталога / файла.Вам нужно построить полный путь, чтобы протестировать его, используя g_file_test.Вы можете использовать g_build_filename для этого.

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 );
}
...