Vala получить дату изменения файла - PullRequest
2 голосов
/ 14 марта 2020

Я новичок в программировании Vala и linux в целом.

Я пытаюсь перечислить данные, аналогичные утилитам оболочки stat для данной папки. Пока это вот что я получил:

int main (string[] args) {
    try {
        File directory = File.new_for_path (".");

        if (args.length > 1) {
            directory = File.new_for_commandline_arg (args[1]);
        }

        FileEnumerator enumerator = directory.enumerate_children (FileAttribute.TIME_MODIFIED, 0);

        FileInfo file_info;


        while ((file_info = enumerator.next_file ()) != null) {

          DateTime t = file_info.get_modification_date_time();

        }

    } catch (Error e) {
        stderr.printf ("Error: %s\n", e.message);
        return 1;
    }

    return 0;
}

Вывод на консоль:

vala --pkg gio-2.0 --pkg glib-2.0 main3.vala 
main3.vala:16.24-16.59: error: The name `get_modification_date_time' does not exist in the context of `GLib.FileInfo?'

Может ли кто-нибудь указать мне правильное направление? Спасибо.

1 Ответ

2 голосов
/ 14 марта 2020

Ошибка в том, что метод не существует. Глядя на Valado c .org для get_modification_date_time, видно, что это было введено в GLib версии 2.62. Эта версия была выпущена 05 сентября 2019 года. Вероятно, ваш дистрибутив еще не включает этот выпуск.

Вы можете попробовать обновить версию GLib или использовать устаревшую get_modification_time:

int main(string[] args) {
    if (args[1] == null) {
        stderr.printf("No filename given\n");
        return 1;
    }
    var file = GLib.File.new_for_path (args[1]);

    try {
        GLib.FileInfo info = file.query_info("*", FileQueryInfoFlags.NONE);
        print (info.get_modification_time().to_iso8601() + "\n");

        print ("\n\nFull info:\n");
        foreach (var item in info.list_attributes (null)) {
            print( @"$item - $(info.get_attribute_as_string (item))\n" );
        }
    } catch (Error error) {
        stderr.printf (@"$(error.message)\n");
        return 1;
    }
    return 0;
}
...