std::filesystem
на C ++ 17 и std::experimental::filesystem
для многих компиляторов до C ++ 17, основаны на boost::filesystem
и почти все это очевидно, чтобы портировать на новый стандарт.
Но я не вижу std::filesystem
эквивалентно boost::filesystem::unique_path()
,
Есть ли в std эквивалент, который я не замечаю? Или есть рекомендуемый подход, который я должен использовать, чтобы имитировать реализацию?
Я действительно надеюсь заменить boost::filesystem
зависимость, когда мой код замечает, что он компилируется на платформе, которая поддерживает std::filesystem
, а также unique_path()
это единственная неочевидная часть моего обращения.
unique_path
был удален, потому что это был потенциальный вектор атаки для вредоносных программ. Между звонками есть окно возможностей unique_path
и открытие файла в этом месте, в течение которого какой-то другой процесс может создать тот же файл. В зависимости от того, что пользователь делает с файлом, это может или не может представлять собой уязвимость системы безопасности. Аналогичная проблема существует с функцией POSIX tmpnam
.
Как отмечено в это обсуждение, этот вопрос будет рассмотрен на следующей итерации Файловая система библиотека. До тех пор вы можете либо продолжать использовать Boost.Filesystem, использовать std::tmpnam
функция предусмотрена в <cstdio>
, или используйте более безопасные альтернативы для конкретной платформы, такие как mkstemp
.
Насколько я могу судить, в C ++ 17 нет точного эквивалента.
Вы действительно не указали, что именно вы хотите сделать, но если вам просто нужно сохранить временный файл где-то тогда вы должны быть в состоянии имитировать аналогичную функциональность с std::filesystem::temp_directory_path
который вы можете добавить со случайно сгенерированным именем файла (что вы можете сделать как это, или измените его соответствующим образом, если вам требуется точно такой же формат имен boost::filesystem::unique_path()
)
Или если вам просто нужно хранить любой временный файл, вы можете использовать std::tmpfile
,