C++ 17ファイルシステムライブラリでは、std::filesystem::remove(path)
を取得しました。私が理解するように、Boost.Filesystemのboost::filesystem::remove(path)
の直接ポートです。std :: removeとboost :: filesystem :: removeの違いは?
C++から継承したC++は、std::remove(path)
という非常によく似た関数で、でもというファイルシステムからファイルを削除する方法として文書化されています。私は、この機能でいくつかの落とし穴を漠然と認識しています。私はWindowsでstd::remove
は、現在のプロセスによって開いて保持されているファイルを削除するために使用することはできないと聞いたと思う。
std::filesystem::remove
は、これらの問題をstd::remove
で修正していますか? std::remove
よりstd::filesystem::remove
を好むべきですか?あるいは、前者は後者の名前空間の同義語で、同じ疣贅と落とし穴がありますか?私はstd::filesystem::remove(path)
はまだライブラリベンダーの多くで実装されていない可能性があること理解ので
私の質問のタイトルはboost::filesystem::remove(path)
とstd::remove(path)
との違いを尋ねたが、私の理解では、基本的に直接コピーすることになっていますということですブーストバージョン。あなたがWindows上のBoost.Filesystemについて知っているなら、おそらくあなたはこの質問に答えるのに十分なことを知っているでしょう。
'boost :: filesystem :: remove'のソースを調べて[単にDeleteFileW'を呼び出していることを知りました](https://github.com/boostorg/filesystem/blob/07619fb37007f45b54bc71877e724c8f4b014c9f/src /operations.cpp#L240)を実行します。 –
'filesystem'関数は、注意を払うときに一般的なUnicodeパスを扱うことができます。特に、現在の実装では、UTF-8からのデフォルト変換に頼るのではなく、明示的にそれを行います。古い 'std :: remove'は狭い実行文字セットに限定されていますが、Windows実装がその実行文字セットがUTF-8であることが検出されたことは間違いありません。 Windowsでは、Windows ANSIの文字を含むパスのみを処理できます。これは、システム固有のエンコーディングです。 –
@ Cheersandhth.-Alf:「実行文字セット」がUTF-8であることをWindows C++実装がどのように検出しますか?そのインプリメンテーションは、独自の実行セット(検出不要)を定義するか、Windows(UTF-8をデフォルトの文字セットとして使用できません)に向かいます。 – MSalters