2

私の問題は次のようなものです: Windows プラットフォームで 2 つのパスが同一であるかどうかを判断するには、大文字と小文字を区別せずにパスを比較します。「C:\test.txt」と「C:\Test.txt」は同じファイル要素に解決されます。たとえば、を使用してこれを簡単に解決できますstd::filesystem::equalが、この特定の問題については、OS ラウンドトリップを少し節約したいと思います (アイドル状態で実行し、各ループで 100 回以上の比較を実行します - 目立つようになるのではないかと心配しています)。

using path = std::filesystem::path;
const bool result =  (path("C:\\test.txt").lexically_normal().make_preferred().native() == path("C:\\Test.txt").lexically_normal().make_preferred().native());

を比較するときstd::filesystem::path、呼び出しによって字句的に正規化された場合でもlexical_normal、一般的な方法で行われるため、大文字と小文字が考慮されます。これはもちろん理にかなっていますが、文字列を自分で比較する以外に、比較せずにライブラリでこれを行う方法がわかりません。パスの比較方法を何らかの方法でオーバーライドすることは可能ですか?

私も調べましboost::filesystemたが、私が見る限り、問題にも対処していません。

4

1 に答える 1

0

path/filesystem区別の全体的なポイントは、path任意のファイルシステムで操作および使用できるパスを格納するための一般的なメカニズムとしての型と、filesystem特定の実装に基づいて異なる可能性がある固有の操作とを区別することです。2 つの等しくないpathオブジェクトはfilesystem::equivalent、あるファイルシステムでは考慮されるが、別のファイルシステムでは考慮されないということは、契約の一部にすぎません。

pathファイルシステム操作ではない、ファイルシステムを意識した「正規化」を実行するメカニズムはありません。

于 2020-04-21T20:14:25.990 に答える