2017-04-10 17 views
13

std::filesystem(C++ 17)、std::experimental::filesystem(多くのプレC++ 17コンパイラ)は、boost::filesystemに基づいており、ほとんどすべてが新しい標準に移植されています。boost :: filesystem :: unique_path()と同等のC++ 17は何ですか?

boost::filesystem::unique_path()に相当するstd::filesystemは表示されません。

stdには気付いていない同等のものがありますか?または、実装を模倣するために推奨すべきアプローチがありますか?

私は本当に私のコードは、それがstd::filesystemをサポートするプラットフォーム上でコンパイルするのつぶやき、およびunique_path()は私の変換の唯一の明らかでない部分であるときboost::filesystem依存関係を置き換えるために願っています。

答えて

1

私の知る限りでは、C++にはまったく同等のものはありません。

あなたは本当にあなたがやりたい正確に何を指定していないが、あなただけの一時ファイルのどこかを格納する必要があるならば、あなたはランダムに生成されたファイル名で追加することができますstd::filesystem::temp_directory_pathと同様の機能を模倣することができるはずです(これはあなたがlike thisを行う、またはあなたがboost::filesystem::unique_path()とまったく同じ命名フォーマットが必要な場合は、それに応じて変更することができます)

それとも、ただ任意の一時ファイルを格納する必要がある場合、あなたはstd::tmpfileを使用することができます。

16

は、マルウェアの潜在的な攻撃経路であったため、削除されました。 unique_pathを呼び出してその場所にあるファイルを開く間に、別のプロセスが同じファイルを作成する機会があります。ユーザーがファイルに何をしているかに応じて、これはセキュリティ上の脆弱性を構成する場合もあれば、そうでない場合もあります。同様の問題がPOSIX関数tmpnamに存在します。

this discussionに記載されているように、この問題はFilesystemライブラリの次の繰り返しで処理されます。それまでは、Boost.Filesystemを使用し続けるか、<cstdio>で提供されるstd::tmpnam機能を使用するか、mkstempなどのプラットフォーム固有のより安全な方法を使用してください。

関連する問題