3

したがって、std :: mapはキータイプの順序付けを望んでいますが、問題が発生しました。

"a / b" <"a / c" <"a //b"しかしfs::equivalent( "a / b"、 "a // b")

"a / b" <"a / c" <"a \ b"しかし、fs :: equivalent( "a / b"、 "a \ b")

順序を作成するのに十分なパスを正規化するにはどうすればよいですか?それも可能ですか?カスタム比較演算子でpath::generic_string()を使用しようとしましたが、機能しませんでした。fs :: equivalent()も役に立ちません。なぜなら、std :: mapには同等性を実装するだけでは不十分であり、順序付けが必要だからです。これが、この質問が重複していない理由でもあります。boost:: filesystemを使用してパス名を「正規化」するにはどうすればよいですか?

コンテキスト:Windowsのみ、Boost 1.49、filesystem3。

4

1 に答える 1

2

パスを比較可能にするには、パスを標準表現に変換してから、文字列を介して比較する必要があります。正規パスは絶対パスであり、正規化されており、シンボリックリンクが削除されています。Boostは標準的なAFAIKを提供します。シンボリックリンクを解決する必要があるため、canonicalを呼び出すには、ファイルシステムにアクセスする必要があります。

于 2012-12-07T13:16:57.370 に答える