什么是C++ 17相当于boost :: filesystem :: unique_path()?

Lar*_*itz 23 c++ boost boost-filesystem c++17 std-filesystem

std::filesystem在C++ 17上,std::experimental::filesystem对于许多前C++ 17编译器来说,基于boost::filesystem并且几乎所有它都很明显地移植到较新的std.

但我认为不std::filesystem相同boost::filesystem::unique_path().

我没有注意到std中的等价物吗?或者我是否应该采用一种推荐的方法来模仿实现?

boost::filesystem当我的代码注意到它在支持的平台上进行编译时,我真的希望能够替换依赖std::filesystem,并且unique_path()是我转换中唯一不明显的部分.

Jos*_*son 21

unique_path被删除,因为它是恶意软件的潜在攻击媒介.unique_path在该位置调用和打开文件之间有一个机会窗口,在此期间某些其他进程可以创建相同的文件.根据用户对文件的处理方式,这可能会也可能不构成安全漏洞.POSIX函数存在类似的问题tmpnam.

本讨论中所述,此问题将在文件系统库的下一次迭代中处理.在此之前,您可以继续使用Boost.Filesystem,使用std::tmpnam提供的功能<cstdio>,或者使用更安全的特定于平台的替代方案mkstemp.


小智 5

据我所知,C++17 中确实没有确切的等价物。

你真的不指定你想要做什么,但如果你只需要存储的临时文件的地方,那么你应该能够模拟类似的功能与std::filesystem::temp_directory_path您可以用随机生成的文件名添加(你可以做这样的或相应地修改它,如果你需要完全相同的命名格式为boost::filesystem::unique_path()

或者,如果您只需要存储任何临时文件,则可以使用std::tmpfile.