novedades lenguaje improvements filesystem diferencias descargar c++ boost c++17 boost-filesystem std-filesystem

lenguaje - ¿Cuál es el equivalente de C++ 17 a boost:: filesystem:: unique_path()?



filesystem c++ (2)

Por lo que sé, realmente no hay un equivalente exacto en C ++ 17.

Realmente no especificó qué es exactamente lo que quiere hacer, pero si solo necesita almacenar un archivo temporal en algún lugar, entonces debería poder imitar una funcionalidad similar con std::filesystem::temp_directory_path que puede agregar con un nombre de archivo generado aleatoriamente (que puede hacer de esta manera , o modificarlo en consecuencia si necesita exactamente el mismo formato de nombre que boost::filesystem::unique_path() )

O si solo necesita almacenar cualquier archivo temporal, puede usar std::tmpfile .

std::filesystem en C ++ 17, y std::experimental::filesystem para muchos compiladores anteriores a C ++ 17, se basan en boost::filesystem y casi todo es obvio de portar a la nueva versión estándar.

Pero no veo std::filesystem equivalente a boost::filesystem::unique_path() .

¿Hay un equivalente en estándar que no estoy notando? ¿O hay un enfoque recomendado que debería tomar para imitar la implementación?

Realmente espero reemplazar la dependencia de boost::filesystem cuando mi código advierte que se está compilando en una plataforma que admite std::filesystem , y unique_path() es la única parte no obvia de mi conversión.


unique_path se eliminó porque era un potencial vector de ataque para malware. Hay una ventana de oportunidad entre llamar a unique_path y abrir un archivo en esa ubicación durante el cual algún otro proceso podría crear el mismo archivo. Dependiendo de lo que el usuario haga con el archivo, esto puede o no constituir una vulnerabilidad de seguridad. Un problema similar existe con la función POSIX tmpnam .

Como se señaló en esta discusión , este problema se tratará en la próxima iteración de la biblioteca del Filesystem archivos. Hasta entonces, puede continuar usando Boost.Filesystem , usar la función std::tmpnam proporcionada en <cstdio> , o usar alternativas más seguras específicas de la plataforma como mkstemp .