27

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()是我转换中唯一不明显的部分。

4

2 回答 2

24

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

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

于 2017-04-10T08:25:21.187 回答
5

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

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

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

于 2017-04-10T08:22:05.043 回答