Я пишу функцию в C++, которая создает временную директорию. Такая функция должна быть максимально возможной, например, он должен работать в среде linux, mac и win32. Как мне это достичь?Как создать временный каталог на C++?
ответ
mkdtemp(char *template)
http://www.cl.cam.ac.uk/cgi-bin/manpage?3+mkdtemp
Создает временный каталог.
Я следил за вашей документацией. Он описывает только, как создать временный файл. То, что было предложено, - это создать временный каталог. –
@ ErikSjölund, вы правы, я связал неправильную команду. –
Для этого нет стандартной функции, поэтому вам нужно будет скомпилировать различные реализации для каждой целевой платформы.
В Windows, например, вы должны использовать временную директорию, которая может быть получена вызовом GetTempPath().
Библиотека файловой системы Boost предоставляет независимые от платформы функции каталогов. Это немного увеличит размер вашей программы, но использование Boost часто лучше (и часто проще), чем сворачивание собственного.
http://www.boost.org/doc/libs/1_43_0/libs/filesystem/doc/index.htm
Я не хочу вводить зависимость от boost только для что. – Gatis
Version 3 повышающего Filesystem Library обеспечивает функцию unique_path()
для формирования имени пути, подходящий для создания временного файла или каталога.
using namespace boost::filesystem;
path ph = unique_path();
create_directories(ph);
Стандарт C++ не имеет функций управления каталогом. – 2010-07-31 22:07:39
Стандарт POSIX имеет определение. Все современные ОС имеют уровень соответствия POSIX (включая окна). Таким образом, семейство функций mktemp() - это то, что вы ищете. Но будьте осторожны, это уязвимость безопасности для создания временного каталога, а затем размещения в нем файлов. Более безопасно создавать дескрипторы файлов напрямую. –
А как насчет getenv() проходящего "TMP"? – Gatis