【发布时间】:2014-12-30 08:42:38
【问题描述】:
我正在尝试执行一项基本任务:将文件夹的内容列出到字符串数组或List<string> 或可迭代的东西。但这似乎很棘手,我在 API 中找不到我需要的东西。
我当前的代码:
using GLib;
using Gtk;
class Demo.HelloWorld : GLib.Object {
public static int main(string[] args) {
File docsets = File.new_for_path (Environment.get_home_dir () +
"/.local/share/zeal/docsets");
try {
GDir* t = g_dir_open(Environment.get_home_dir ());
} catch (FileError e) {
stderr.printf ("%s\n", e.message);
}
stdout.printf(Environment.get_home_dir ()+"\n");
stdout.printf("Hello, World\n");
return 0;
}
}
我正在编译:valac main.vala --pkg gtk+-3.0,我收到以下错误:
main.vala:27.6-27.14: error: The type name `GLib.GDir' could not be found
GLib.GDir* t = g_dir_open(Environment.get_home_dir ());
我试着看着 https://developer.gnome.org/glib/2.42/glib-File-Utilities.html 和 http://valadoc.org/#!api=glib-2.0/GLib.Log.FILE,一开始看起来很简单。
感谢您的帮助。
更多全球背景:我想尝试一下 Synapse (launchpad.net/synapse-project) 插件。
【问题讨论】:
-
您自己在答案中发现了这一点,但也许这对其他人有帮助:C/C++ 代码中的 GLib 类以
G为前缀。在 Vala 中,您必须删除该前缀,例如GDir变为GLib.Dir(或者只是Dir,因为默认情况下始终使用 GLib)。 -
类似地
g_dir_open ()变成Dir.open (),你也不应该在 Vala 中使用指针。 Vala 正在使用具有自动引用计数的引用。此外,您可以使用类型推断,因此您的行会更短,写成var t = Dir.open (...); -
千百次感谢这些建议!!! Vala 看起来是一个非常好的开发选择,而名称空间看起来有点令人困惑:D