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

时间:2017-04-10 06:47:51

标签: c++ boost c++17 boost-filesystem std-filesystem

C ++ 17上的

std::filesystem和许多前C ++ 17编译器的std::experimental::filesystem都基于boost::filesystem,并且几乎所有这些都是显而易见的移植到更新的性病。

但我发现std::filesystem等同于boost::filesystem::unique_path()

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

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

2 个答案:

答案 0 :(得分:19)

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

this discussion所述,此问题将在Filesystem库的下一次迭代中处理。在此之前,您可以继续使用Boost.Filesystem,使用std::tmpnam中提供的<cstdio>功能,也可以使用更安全的特定于平台的替代方案,例如mkstemp

答案 1 :(得分:3)

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

您没有真正指定您想要做什么,但如果您只需要在某个地方存储临时文件那么您应该可以使用std::filesystem::temp_directory_path模仿类似的功能您可以附加一个随机生成的文件名(您可以like this添加,或者如果您需要与boost::filesystem::unique_path()完全相同的命名格式,则可以相应地修改它)

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