3

(macruby 構文のコード例)

次の URL を作成する場合:

u1 = NSURL.fileURLWithPath('/tmp')

次に、シンボリックリンクが解決された URL の作成を試みます。

u2=u1.URLByResolvingSymlinksInPath

/tmp に戻ります:

irb(main):010:0> u2.pathComponents
=> ["/", "tmp"]

この NSURL (または /var または /etc) で NSDirectoryEnumerator を作成し、NSURLParentDirectoryURLKey をプリフェッチすると、返される NSURL のパスが /private/tmp/... になるため、これは問題です。

NSDirectoryEnumerator のルートに相対的なディレクトリ パスのコンポーネントを取得する必要があります。私が知っている特殊なケース (これまでのところ /tmp、/var、および /etc) のハードコーディングされた検出以外に、これを行うための堅牢な方法はありますか?

URLByResolvingSymlinksInPath が機能しない他の「特別な」ディレクトリを知っている人はいますか?

4

2 に答える 2

3

私はこれに対する完全な答えを見つけることができませんでした。私の場合、/ tmp、/ var、/etcを処理するメソッドをNSURLに追加しました。

class NSURL
  def URLByResolvingSymlinksInPathIncludingPrivate
    url = self.URLByResolvingSymlinksInPath
    parts = url.pathComponents
    if (parts.first == '/') && ['tmp', 'var', 'etc'].include?(parts[1])
      url = NSURL.fileURLWithPathComponents(['/', 'private'] + parts[1..-1])
    end
    url
  end
end

モンキーパッチURLByResolvingSymlinksInPathではなく、明示的なメソッドを追加するのが最善であると判断しました。

于 2011-08-04T21:31:56.040 に答える