C++ 17の_std::filesystem
_、および多くのC++ 17以前のコンパイラの_std::experimental::filesystem
_は、_boost::filesystem
_に基づいており、ほとんどすべてが新しいstdに移植できます。
しかし、boost::filesystem::unique_path()
に相当する_std::filesystem
_はありません。
Stdに私が気づいていない同等のものはありますか?または、実装を模倣するために私が取るべき推奨されるアプローチはありますか?
私のコードが_boost::filesystem
_をサポートするプラットフォームでコンパイルしていることにコードが気付いたとき、_std::filesystem
_依存関係を置き換えたいと思っています。変換の明白な部分はunique_path()
だけです。
unique_path
は、マルウェアに対する潜在的な攻撃経路だったため、削除されました。 unique_path
を呼び出してからその場所でファイルを開くまでの間に、他のプロセスが同じファイルを作成する可能性があります。ユーザーがファイルをどうするかによって、これはセキュリティの脆弱性を構成する場合としない場合があります。 POSIX関数 tmpnam
にも同様の問題があります。
この説明 で述べたように、この問題は Filesystem ライブラリの次の反復で処理されます。それまでは、 Boost.Filesystem を引き続き使用するか、 std::tmpnam
で提供される <cstdio>
関数を使用するか、または mkstemp
のような、プラットフォーム固有の安全な代替手段を使用します。
私が知る限り、C++ 17にはまったく同じものはありません。
実際に何をしたいかを具体的に指定していませんが、一時ファイルをどこかに保存する必要がある場合、同様の機能を模倣できるはずです。ランダムに生成されたファイル名を追加できるstd::filesystem::temp_directory_path
を使用した機能(これは これのように)できます 、またはboost::filesystem::unique_path()
とまったく同じ命名形式が必要な場合はそれに応じて変更します)
または、any一時ファイルを保存するだけの場合は、std::tmpfile
を使用できます。