【发布时间】:2008-09-18 08:46:13
【问题描述】:
这样做的最佳方法是什么? tmpnam() 返回驱动器根目录中文件的路径,这需要 Windows Vista 上的管理员权限,所以这不是一个选项。
【问题讨论】:
标签: windows windows-vista temporary-files
这样做的最佳方法是什么? tmpnam() 返回驱动器根目录中文件的路径,这需要 Windows Vista 上的管理员权限,所以这不是一个选项。
【问题讨论】:
标签: windows windows-vista temporary-files
GetTempPath 和 GetTempFileName 应该可以工作。
【讨论】:
Windows 上的环境变量 %TEMP% 指向用户临时目录。
在托管 C++ 中,您可以调用 Path::GetTempFileName(),它会在用户临时目录中为您提供一个临时文件(可以使用 Path::GetTempPath() 找到)。 GetTempFileName() 基本上只是为您提供 %TEMP% 路径中的文件的路径,使用 GUID 作为文件名。然后,您使用该路径来创建文件并使用它做您想做的事情。您可以使用任何可以访问当前进程环境变量的语言来执行类似的逻辑。
希望对你有帮助,
马丁。
【讨论】:
您是否尝试过将环境变量 TEMP 和 TMP 设置为所有人可写的目录? 要在 XP 中更改环境变量(不熟悉 Vista),请转到系统属性,[高级]选项卡,[环境变量]按钮。
【讨论】:
也许您可以在 kernel32.dll 中使用 Win32 方法 GetTempPath()。这是由 System.IO.Path.GetTempFileName() 封装在 .NET 中的。
在 XP 上,这会返回 C:\Documents and Settings\username\Local Settings\Temp\ 中的路径,因此您不需要管理员权限。
【讨论】:
如果您关心互操作性,tmpnam 的手册页建议:
BUGS
Never use this function. Use mkstemp(3) instead.
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 环境变量内容为前缀的模板。
【讨论】: