C++ 11対応のコンパイラまたはC++ 14対応のコンパイラで使用するためのファイルシステムライブラリが必要です。C++ 17からのものにすることはできません。
今、私はC++ 17に入るファイルシステムライブラリがBoost :: Filesystemに基づいていることを知っています。しかし、それらは、Boostライブラリを使用して、後でusing
ステートメントを変更することなく、後で標準バージョンにシームレスに切り替えるのに十分似ていますか?または、2つの間に(マイナー/重要な)違いはありますか? variant
の場合、Boostと標準ライブラリのバージョンはかなり異なります。
いくつかの違いがあります。一部には、伝播されなかったBoostの変更があったと思います。たとえば、path.filename_is_dot()
クエリはありません(以下で説明するように、_std::filesystem
_ではとにかくあまり役に立ちません)。
この前線には、最新のニュースもかなりありました。
file_size
_を定義できます。filename()
、正規化、および相対/絶対変換が再定義されました (POSIXの例):path("foo/.").lexically_normal()=="foo/"
(Boostでは反対です)path("foo/").filename()==""
(Boostではpath(".")
です)remove_filename()
は末尾のスラッシュを残し、したがってべき等です(Boostでparent_path()
を割り当てます)path(".profile").extension()==""
(Boostでの名前全体)path
の分解と組み合わせにより、 代替データストリーム名 のような、通常は表示されないものを保持できます。path("foo")/"/bar"=="/bar"
(is path("foo/bar")
in Boost)、相対ファイル名を他のファイル名(絶対または相対)で構成できるようにし、Boostのabsolute()
を置き換えますsystem_complete()
(引数を1つだけ取る)はabsolute()
に名前が変更されましたcanonical()
は1つの引数のみを受け取ります( [〜#〜] dr [〜#〜] で修正)lexically_relative()
は_..
_およびルート要素を正しく処理しますpermissions()
はより多くの引数を取ります(Boostはそれらをビットマスクに結合します)Boost.Filesystem v4は 開発中 であり、C++ 17互換であると想定されています(したがって、v3との多くの点で互換性がありません)。
警告:この回答は、C++ 17が確定する前の最後のいくつかの変更を反映していません。 @DavisHerringの回答を参照してください。
Boostファイルシステムインサーターとエクストラクターは、&
と"
のエスケープ文字として&
を使用します。
標準は std::quoted
(デフォルトでは\
を使用)を使用して"
をエスケープし、次に\\
を使用して\
をエスケープします。 このリファレンス を参照してください。
それはおそらくそれらの間の唯一の違いです。
その違いの理由は N3399 にあります