2011-12-20 9 views
1

私は2つの方法が考えられます:まず、文字列自体を操作できます。最後の "/"の前にあるすべてのものを削除します。または、URIを使用してFileオブジェクトを取得した後、query_info()。get_display_name()を呼び出します。ValaのURIからファイルのベース名を取得する最良の方法は何ですか?

最初のものは気持ちが悪く、2番目のものは2つのオブジェクトが作成されます。ここに従うベストプラクティスは何ですか?

答えて

4

(GLib.Fileを使用して)第二の方法は、おそらく最も堅牢ですが、...

何を持っていることは本当にパスではなく、URI(例えば、/ホーム/ fooの/バーではない場合ファイル:///ホーム/ fooの/バー)あなただけの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")); 
+0

+1あなたがどのような使い方をとっているかを理解することは、必要な堅牢性、すなわちあなたの入力をどれだけ信頼できるかによって異なります。私はこのコメントでポイントをもう少し微妙にしか作れません;-) – ptomato

関連する問題