Path.GetTempPath()始终返回%USERPROFILE%。

3
我编写了一个调用System.IO.Path.GetTempPath()函数的程序。所有我读到的文档(例如这个)都说该函数应返回以下列表中找到的第一个路径:
  • TMP环境变量指定的路径。
  • TEMP环境变量指定的路径。
  • USERPROFILE环境变量指定的路径。
  • Windows目录。
我已经定义了TMPTEMP环境变量为%USERPROFILE%\AppData\Local\Temp,但是调用GetTempPath()总是返回我的%USERPROFILE%目录,而不是我定义的TMPTEMP的值。如何使该函数返回我定义的临时目录?

你在哪里定义了那些环境变量?你确定它们实际上被定义为你正在运行的程序吗? - Eric Petroelje
@EricPetroelje 我在高级系统设置控制面板的环境变量对话框中定义了这些变量。如果我在运行对话框中键入 %TEMP% 或 %TMP%(这是 Windows 7),它将打开我期望的目录(%USERPROFILE%\AppData\Local\Temp)。 - Gillfish
2个回答

3
那是一个环境设置。 http://msdn.microsoft.com/en-us/library/77zkk0b6.aspx
var tmp = Environment.GetEnvironmentVariable("tmp");

更新: 我进入了命令提示符并执行了以下操作

SET TMP=C:\Temp

然后我通过命令提示符启动了Visual Studio。 现在我的环境已经更新,Visual Studio也能看到它。上面的代码(以及你的代码)对我来说都有效。它显示了更新的环境设置。

因此,我认为您需要关闭资源管理器或注销才能永久地看到新的环境。


是的,我将临时路径设置为环境变量。我的理解是,设置该变量会影响GetTempPath()函数返回的值,但似乎并没有产生影响。 - Gillfish
3
你的回答促使我发现了问题,所以我打算把它标记为答案。我已经很长时间从Cygwin命令提示符启动Visual Studio(不要问为什么,我们公司设置我们的解决方案只能用这种方式),以至于我甚至没有考虑到Cygwin重新定义环境变量。一旦我通过开始菜单正常启动Visual Studio,它返回了我预期的路径。 - Gillfish

0

你在启动 Visual Studio 后创建了 TMP 和 TEMP 变量吗?

尝试重新启动 VS,或从 Windows Explorer 运行应用程序。甚至可以重启 Windows。

环境变量是在进程创建时分配给进程的,并且它们不会为该进程更改。此外,子进程继承其父进程的环境变量。因此,从创建变量之前启动的 Visual Studio 会话中运行应用程序意味着该应用程序将无法使用这些变量。因此需要重新启动。


自从设置了这些变量后,我已经重新启动了Visual Studio和计算机。 - Gillfish
奇怪。你是怎么设置它们的?另外,重启后它们还保持设置吗? - user47589
我在“环境变量系统对话框”中定义了它们。请参见上面的我的评论。是的,在重新启动之后它们仍然保持设置状态。 - Gillfish
MSDN上的文档说该函数返回当前用户的临时文件夹,因此可能不是系统范围内的。我还没有测试过它,只是在MSDN上查了一下。 - joebalt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接