Независимый от ОС способ создания временного файла на C++ ⇐ C++
Независимый от ОС способ создания временного файла на C++
Я использую следующий код уже довольно давно, и он отлично работает под Linux и всегда работал под MacOS, пока я, наконец, не обновил свой (более старый) Mac до MacOS 12. Обратите внимание, что для получения уникального временного пути используется boost. databaseCopyPath для места назначения копии
const std::string DatabasePath = _modelPath + "/database.db"; const std::string dataCopyPath = (boost::filesystem::temp_directory_path() / boost::filesystem::unique_path()).string(); const std::filesystem::copy_options copyOptions = std::filesystem::copy_options::overwrite_existing; std::filesystem::copy(databasePath, dataCopyPath, copyOptions); std::filesystem::copy теперь не работает на моем Mac
std::__1::__fs::filesystem::filesystem_error: ошибка файловой системы: в copy_file: операция не разрешена ["/var/folders/67/290qhsl54qd6l6m2jhtrv3gh0000gn/T/2fc5-a5be-61d9-fe06"] ["/Volumes/MyBook/Quintar/NBA/GoldenStateMat/sfm-pruned-scaled/database.db"] Папка, в которой пытается создать временный файл 2fc5-a5be-61d9-fe06 существует, и у меня (wcochran) есть разрешение на запись
$ ls -ld /var/folders/67/290qhsl54qd6l6m2jhtrv3gh0000gn/T drwx------ 3432 wcochran Staff 109824 26 сентября 09:22 /var/folders/67/290qhsl54qd6l6m2jhtrv3gh0000gn/T $ touch /var/folders/67/290qhsl54qd6l6m2jhtrv3gh0000gn/T/foo $ ls -l /var/folders/67/290qhsl54qd6l6m2jhtrv3gh0000gn/T/foo -rw-r--r-- 1 сотрудник wcochran 0 26 сен 09:25 /var/folders/67/290qhsl54qd6l6m2jhtrv3gh0000gn/T/foo Теперь я предполагаю, что здесь может быть астрономически небольшой риск безопасности при использовании unique_path() boost (которого я мог бы избежать, используя специфичные для ОС вызовы, такие как mkstemp). Тот факт, что unique_path() Boost возвращает достаточно длинный «случайный хэш», исключает любую разумную вероятность проникновения другого процесса и создания файл с тем же именем.
В любом случае, существует ли независимый от ОС/платформы способ создания и записи временного файла на С++?
Я использую следующий код уже довольно давно, и он отлично работает под Linux и всегда работал под MacOS, пока я, наконец, не обновил свой (более старый) Mac до MacOS 12. Обратите внимание, что для получения уникального временного пути используется boost. databaseCopyPath для места назначения копии
const std::string DatabasePath = _modelPath + "/database.db"; const std::string dataCopyPath = (boost::filesystem::temp_directory_path() / boost::filesystem::unique_path()).string(); const std::filesystem::copy_options copyOptions = std::filesystem::copy_options::overwrite_existing; std::filesystem::copy(databasePath, dataCopyPath, copyOptions); std::filesystem::copy теперь не работает на моем Mac
std::__1::__fs::filesystem::filesystem_error: ошибка файловой системы: в copy_file: операция не разрешена ["/var/folders/67/290qhsl54qd6l6m2jhtrv3gh0000gn/T/2fc5-a5be-61d9-fe06"] ["/Volumes/MyBook/Quintar/NBA/GoldenStateMat/sfm-pruned-scaled/database.db"] Папка, в которой пытается создать временный файл 2fc5-a5be-61d9-fe06 существует, и у меня (wcochran) есть разрешение на запись
$ ls -ld /var/folders/67/290qhsl54qd6l6m2jhtrv3gh0000gn/T drwx------ 3432 wcochran Staff 109824 26 сентября 09:22 /var/folders/67/290qhsl54qd6l6m2jhtrv3gh0000gn/T $ touch /var/folders/67/290qhsl54qd6l6m2jhtrv3gh0000gn/T/foo $ ls -l /var/folders/67/290qhsl54qd6l6m2jhtrv3gh0000gn/T/foo -rw-r--r-- 1 сотрудник wcochran 0 26 сен 09:25 /var/folders/67/290qhsl54qd6l6m2jhtrv3gh0000gn/T/foo Теперь я предполагаю, что здесь может быть астрономически небольшой риск безопасности при использовании unique_path() boost (которого я мог бы избежать, используя специфичные для ОС вызовы, такие как mkstemp). Тот факт, что unique_path() Boost возвращает достаточно длинный «случайный хэш», исключает любую разумную вероятность проникновения другого процесса и создания файл с тем же именем.
В любом случае, существует ли независимый от ОС/платформы способ создания и записи временного файла на С++?
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Как я могу использовать Duckdb.read_json_auto в Python без создания временного файла?
Anonymous » » в форуме Python - 0 Ответы
- 33 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Существует ли независимый от платформы «способ Python» для установки Graviz?
Anonymous » » в форуме Python - 0 Ответы
- 16 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Существует ли независимый от платформы «способ Python» для установки Graviz?
Anonymous » » в форуме Python - 0 Ответы
- 13 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Xorg: аппаратно-независимый способ узнать, присутствует ли физическая клавиатура
Anonymous » » в форуме C++ - 0 Ответы
- 12 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Xorg: аппаратно-независимый способ узнать, присутствует ли физическая клавиатура
Anonymous » » в форуме C++ - 0 Ответы
- 20 Просмотры
-
Последнее сообщение Anonymous
-