【发布时间】:2009-05-04 19:17:04
【问题描述】:
GTK# 的FileChooserDialog 可以用作统一的文件/URI 对话框吗?我希望它接受 http/https/ftp URI 而无需“重写”它们(预先添加本地目录)。
即使我设置 LocalOnly=false 并将 http://.... uri 粘贴到文件选择器内的文本框中,我也无法获得原始条目。本地目录总是附加在文本之前。
【问题讨论】:
GTK# 的FileChooserDialog 可以用作统一的文件/URI 对话框吗?我希望它接受 http/https/ftp URI 而无需“重写”它们(预先添加本地目录)。
即使我设置 LocalOnly=false 并将 http://.... uri 粘贴到文件选择器内的文本框中,我也无法获得原始条目。本地目录总是附加在文本之前。
【问题讨论】:
我做了一些研究,但我认为这是不可能的。至少不是直接使用原生 C GTK+ API,这是我测试的。
在我的测试中,我总是将本地目录的路径添加到我在对话框中输入的 http:// URI 前面,或者返回(null)。我确实调用了@987654321@ 方法,而不仅仅是@987654322@()。
作为参考,我还快速浏览了GIMP 应用程序的“文件”菜单。您可能知道,GIMP 在 GTK+ 中提供了 G,因此有时可以将其用作有关如何使用该工具包的想法的参考。 GIMP 不尝试支持在文件选择器对话框中输入的 URI,而是有一个专用的 Open Location 命令,它打开一个只有 GtkEntry 的简单对话框。
【讨论】:
我认为您需要将 local-only 设置为 FALSE,然后使用 GIO get_file ()/get_files () 调用返回可通过 GIO 文件 API 访问的 GFile*,因此可通过 gvfs 访问。
【讨论】:
毕竟(在 C# 中)我找到了解决方案/破解:
private string _extractUri(Widget wi) {
if (wi is Entry)
return ((wi as Entry).Text);
else if (wi is Container) {
foreach (Widget w in (wi as Container).Children) {
string x = _extractUri(w);
if (x!=null)
return x;
}
}
return null;
}
我不确定这是否总是安全的,但它适用于标准 FileChooserDialog。它将从输入字段返回原始字符串 - 即使标准 Uri / 文件结果被破坏。
【讨论】: