2010-07-31 3 views
6

Я пишу функцию в C++, которая создает временную директорию. Такая функция должна быть максимально возможной, например, он должен работать в среде linux, mac и win32. Как мне это достичь?Как создать временный каталог на C++?

+0

Стандарт C++ не имеет функций управления каталогом. – 2010-07-31 22:07:39

+3

Стандарт POSIX имеет определение. Все современные ОС имеют уровень соответствия POSIX (включая окна). Таким образом, семейство функций mktemp() - это то, что вы ищете. Но будьте осторожны, это уязвимость безопасности для создания временного каталога, а затем размещения в нем файлов. Более безопасно создавать дескрипторы файлов напрямую. –

+0

А как насчет getenv() проходящего "TMP"? – Gatis

ответ

0

mkdtemp(char *template)

http://www.cl.cam.ac.uk/cgi-bin/manpage?3+mkdtemp

Создает временный каталог.

+0

Я следил за вашей документацией. Он описывает только, как создать временный файл. То, что было предложено, - это создать временный каталог. –

+1

@ ErikSjölund, вы правы, я связал неправильную команду. –

4

Проверьте функцию mkdtemphere.

+0

Этого не существует в Windows, насколько я знаю. :( –

+0

Я думаю, вы писатель ... удаление ... – 2010-08-01 03:17:08

+1

нет независимого от платформы способа сделать это в стандартном c/C++, использовать GetTempPath и GetTempFileName для Windows – Kane

0

Для этого нет стандартной функции, поэтому вам нужно будет скомпилировать различные реализации для каждой целевой платформы.

В Windows, например, вы должны использовать временную директорию, которая может быть получена вызовом GetTempPath().

1

Библиотека файловой системы Boost предоставляет независимые от платформы функции каталогов. Это немного увеличит размер вашей программы, но использование Boost часто лучше (и часто проще), чем сворачивание собственного.

http://www.boost.org/doc/libs/1_43_0/libs/filesystem/doc/index.htm

+0

Я не хочу вводить зависимость от boost только для что. – Gatis

13

Version 3 повышающего Filesystem Library обеспечивает функцию unique_path() для формирования имени пути, подходящий для создания временного файла или каталога.

using namespace boost::filesystem; 

path ph = unique_path(); 
create_directories(ph);