私はこの主題について最善の予言をしたいと思います. 実際に何かを行う前に、パス マジックを実行する必要があります。
using namespace boost::filesystem;
path p = "apple"; // apple
p /= "pear"; // apple/pear
p /= ".."; // apple/pear/.. // apple
p /= "chicken"; // apple/pear/../chicken // apple/chichken
p /= ".."; // apple/pear/../chicken/.. // apple
p /= ".."; // apple/pear/../chicken/../.. // .
p /= ".."; // apple/pear/../chicken/../../.. // ..
p /= "cow"; // apple/pear/../chicken/../../../cow // ../cow
path s = "\\tmp\\file857463.tmp"; // s.is_relative() is true on windows
最初の行以降のすべての行で、//
印刷したときに何が得られるかを確認できます。2 秒後に、//
私が見たいものを見ることができます (異なる場合)
ファイルシステムに絶対に触れたくないことを考慮して、この動作を確認したい場合は、どの中間ステップを実行できますか/実行する必要がありますか。最終的なフォームが表示されたら、参照が現在のディレクトリ内を指しているかどうかをテストしたいと思います (まだ FS にアクセスせずに)。
\
(windows) または\\
(windows) または/
Linuxのような上向きのジャンプを検出したいと思います。マニュアルからの引用: Windows では、path("/foo").is_absolute() は false を返します。これは非常に科学的ですが、役に立ちません。私の主な目標は、手動で文字にアクセスしたり、FS にアクセスしたりすることなく、上方参照を防ぐことです。(手動で文字に触れる必要がある場合は、独自のパス ユーティリティをまとめて作成します。)
ドライブのルート参照を検出するための堅牢な概念を見つけることができませんでした。ブーストドキュメントとGoogleも試しました。