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 .