std::filesystem
和许多前C ++ 17编译器的std::experimental::filesystem
都基于boost::filesystem
,并且几乎所有这些都是显而易见的移植到更新的性病。
但我发现std::filesystem
等同于boost::filesystem::unique_path()
。
我没有注意到std中的等价物吗?或者我是否应该采用一种推荐的方法来模仿实现?
我真的希望在我的代码注意到它在支持boost::filesystem
的平台上进行编译时替换std::filesystem
依赖项,而unique_path()
是我转换中唯一不明显的部分。
答案 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
。