我正在尝试获取目录列表,并使用Vala将其排序为上次修改的时间顺序。
我已将目录列表部分放入List< FileInfo>。 但我无法弄清楚如何对列表进行排序。
答案 0 :(得分:4)
这是通过sort(CompareFunc<G> compare_func)
类中的List
方法完成的。您可以阅读更多相关信息here。
字符串的基本示例是:
list.sort((a,b) => {
return a.ascii_casecmp(b);
});
传递给sort()
的函数的返回值与ISO C90 qsort(3)
函数相同:
如果第一个参数被认为分别小于,等于或大于第二个参数,则比较函数必须返回小于,等于或大于零的整数。
由于您对修改时间感兴趣,因此您要查找的FileAttribute
get_attribute_*
是FileInfo
,您可以通过调用{{1}}的{{1}}方法获得该方法。
答案 1 :(得分:0)
static int main (string[] args) {
var directory = File.new_for_path ("/var/db/pkg");
var glib_list = new GLib.List<FileInfo> ();
try {
var enumerator = directory.enumerate_children (FileAttribute.TIME_MODIFIED, FileQueryInfoFlags.NOFOLLOW_SYMLINKS);
FileInfo file_info;
while ((file_info = enumerator.next_file()) != null) {
glib_list.append(file_info);
}
} catch(Error e) {
stderr.printf ("Error: %s\n", e.message);
}
// Lets sort it.
CompareFunc<FileInfo> my_compare_func = (a, b) => {
long c = a.get_modification_time().tv_sec;
long d = b.get_modification_time().tv_sec;
return (int) (c > d) - (int) (c < d);
};
glib_list.sort(my_compare_func);
foreach (FileInfo file_info in glib_list) {
stdout.printf ("%s\n", file_info.get_name());
}
return 0;
}