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
.