Linux 使用Vala列出文件夹内容

Linux 使用Vala列出文件夹内容,linux,glib,vala,Linux,Glib,Vala,我正在尝试做一项基本任务:将文件夹的内容列成字符串数组或列表或其他可编辑的内容。但是它看起来很棘手,我在API中找不到我需要的东西 我当前的代码: 使用GLib; 使用Gtk; 类Demo.HelloWorld:GLib.Object{ 公共静态int main(字符串[]args){ File docsets=File.new\u for\u path(Environment.get\u home\u dir()+ “/.local/share/zeal/docset”); 试一试{ GDir

我正在尝试做一项基本任务:将文件夹的内容列成字符串数组或
列表或其他可编辑的内容。但是它看起来很棘手,我在API中找不到我需要的东西

我当前的代码:

使用GLib;
使用Gtk;
类Demo.HelloWorld:GLib.Object{
公共静态int main(字符串[]args){
File docsets=File.new\u for\u path(Environment.get\u home\u dir()+
“/.local/share/zeal/docset”);
试一试{
GDir*t=g_dir_open(Environment.get_home_dir());
}捕获(文件错误e){
stderr.printf(“%s\n”,e.message);
}
printf(Environment.get_home_dir()+“\n”);
printf(“你好,世界”\n);
返回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 ());
我试着看着 及 ,一开始看起来很简单

谢谢你的帮助


有关更多全局上下文:我想尝试一下Synapse(launchpad.net/Synapse项目)插件。

我终于在以下位置找到了一些示例:

我有以下代码:

class Demo.HelloWorld:GLib.Object{
公共静态int main(字符串[]args){
File docsets=File.new\u for\u path(Environment.get\u home\u dir)()+
“/.local/share/zeal/docset”);
试一试{
string directory=“./”;
Dir=Dir.open(目录,0);
string?name=null;
而((name=dir.read_name())!=null){
字符串路径=path.build\u文件名(目录、名称);
字符串类型=”;
if(FileUtils.test(路径,FileTest.IS_常规)){
类型+=“|常规”;
}
if(FileUtils.test(路径,FileTest.IS_SYMLINK)){
类型+=“|符号链接”;
}
if(FileUtils.test(路径,FileTest.IS_DIR)){
类型+=“|DIR”;
}
if(FileUtils.test(路径,FileTest.IS_可执行)){
类型+=“|可执行文件”;
}
stdout.printf(“%s\t%s\n”,名称,类型);
}
}捕获(文件错误错误){
stderr.printf(错误消息);
}
返回0;
}
}

我希望这将对某人有所帮助。

您确定此代码工作正常吗?您正在创建一个
文件
对象,但未使用它。
directory
string变量不应该包含您的docsets路径吗?是的,这段代码有效(我不是作者,所以…),这只是为了证明概念,当然我使用的是docsets而不是directory string。您在回答中发现了这一点,但这可能对其他人有帮助:C/C++代码中的GLib类的前缀是
G
。在Vala中,您必须删除该前缀,例如,
GDir
变成
GLib.Dir
(或者只是
Dir
,因为GLib在默认情况下总是被使用)。类似地,
g\u Dir\u open()
变成
Dir.open()
,您也不应该在Vala中使用指针。Vala使用的是带有自动引用计数的引用。另外,您可以使用类型推断,这样您的行将更短,写为
var t=Dir.open(…)感谢您的建议!!!Vala看起来是一个非常好的开发选择,而名称空间看起来有点混乱:D