Как лучше всего это сделать? tmpnam() возвращает путь к файлу в корне диска, что требует прав администратора в Windows Vista, так что это не вариант.
Как создать путь к временному файлу в Windows XP/Vista
Ответы (5)
Переменная среды %TEMP% в Windows указывает на временный каталог пользователя.
В управляемом С++ вы можете вызвать Path::GetTempFileName(), который даст вам временный файл во временном каталоге пользователя (который можно найти с помощью Path::GetTempPath() ). GetTempFileName() в основном просто дает вам путь к файлу в пути %TEMP%, используя GUID в качестве имени файла. Затем вы используете этот путь для создания файла и делаете с ним то, что хотите. Вы можете сделать аналогичную логику на любом языке, который имеет доступ к текущим переменным среды процессов.
Надеюсь, это поможет,
Мартин.
Вы пробовали с переменными среды TEMP и TMP, установленными в каталог, доступный для записи всем? Чтобы изменить переменные среды в XP (не знакомы с Vista), перейдите в Свойства системы, вкладку [Дополнительно], кнопку [Переменные среды].
Возможно, вы могли бы использовать метод Win32 GetTempPath() в kernel32.dll. Это обернуто в .NET с помощью System.IO.Path.GetTempFileName().
В XP это возвращает путь в C:\Documents and Settings\username\Local Settings\Temp\, поэтому вам не нужны права администратора.
Если вы заботитесь о совместимости, справочная страница для tmpnam предлагает:
справочная страница tmpnam
BUGS
Never use this function. Use mkstemp(3) instead.
справочная страница mkstemp
SYNOPSIS
#include <stdlib.h>
int mkstemp(char *template);
DESCRIPTION
The mkstemp() function generates a unique temporary file name from template. The last six characters of template must be
XXXXXX and these are replaced with a string that makes the filename unique. The file is then created with mode read/write
но все это предполагает, что вы подготовили свой шаблон с префиксом содержимого переменной среды TMP.