我可以想到两种方法:首先,我可以操纵字符串本身;删除最后一个“/”之前的所有内容。或者,我可以使用 URI 获取 File 对象,然后调用 query_info().get_display_name()。
第一个感觉不对,而第二个导致创建了两个对象。在这里遵循的最佳做法是什么?
第二种方式(使用 GLib.File)可能是最强大的,但是......
如果你真的是一个路径,而不是一个 URI(例如,/home/foo/bar 不是 file:///home/foo/bar),你可以只使用 GLib.Path.get_basename:
GLib.Path.get_basename ("/home/foo/bar");
因为可以对 URI 中的字符进行编码(例如,%20 而不是空格),如果你真的有一个 URI,你可能需要先对字符串进行转义:
GLib.Path.get_basename (GLib.Uri.unescape_string ("file:///home/foo/bar%20baz"));