Path.GetTempPath() 返回的路径是否保持不变?

8
我有一个 Web 服务,它调用另一个可执行文件来获取文件列表并将它们存储在临时位置,然后由网络服务读取。我想使用系统的临时文件夹,并发现我可以使用 System.IO.Path.GetTempPath 函数获取临时文件夹并在此处存储我的文件。但是,当我检查该函数返回的输出时,它给了我:

C:\Users\username\AppData\Local\Temp\15\

我担心路径末尾的 \15。这是否意味着 GetTempPath 返回的临时文件夹不是恒定的并且会更改? 因为我需要 Web 服务从可执行文件输出的临时文件中读取,所以我需要它是常量。

3
保存文件时,不仅要保存文件名,还要保存整个路径。这样,即使路径变化也不会影响文件的存储。 - Ben
你如何控制其他可执行文件写入文件的位置?是否可能在第一次不将文件写入磁盘的情况下执行可执行文件所做的操作?可执行文件在相同的身份下运行吗? - Jodrell
1
它们是否以相同的用户身份运行?通常情况下,您不会在c:\ users下看到服务帐户的tmp文件夹,为什么不添加自己的“MY_SHARED_PATH”环境变量并使用.GetEnvironmentVariable获取它呢? - Alex K.
@Jodrell - 可执行文件将由 Web 服务启动,因此我认为它将使用相同的身份。可执行文件会获取给定 ID 的图像,并且这可能会在我未来要处理的其他项目中被重复使用。因此,写入文件是我能想到的可执行文件与 WS 通信的唯一方法。 - Sadhir
1
@Sadhir,为什么不将整个可执行文件路径传递给Web服务,这样Web服务可以控制文件创建的位置。 - Ben
显示剩余2条评论
2个回答

3
即使这篇文章有点老,我仍然想分享一些知识 :-)
在终端服务器上运行时,Windows 的默认行为是为每个连接到该服务器的用户创建一个单独的临时子文件夹。虽然有方法可以影响这一点,但在你想要这样做之前,我建议将你的文件放在其他地方。

(http://blogs.msdn.com/b/oldnewthing/archive/2011/01/25/10119675.aspx)


1
雷蒙德的博客链接已经失效,但这是相关的组策略:管理模板\Windows 组件\远程桌面服务\远程桌面会话主机\临时文件夹 > 不要为每个会话使用临时文件夹 - undefined

3

根据文档

该方法按以下顺序检查环境变量的存在并使用找到的第一个路径:

1.由TMP环境变量指定的路径。

  1. 由TEMP环境变量指定的路径。

  2. 由USERPROFILE环境变量指定的路径。

  3. Windows目录。

因此,除非您更改了环境,否则结果是稳定的。

(如果您以服务帐户身份运行且从未进行过交互式登录,则可能发生环境更改),这将具有默认的%SystemRoot%\Temp文件夹。如果有人使用该服务帐户登录服务器,则会创建配置文件并更改临时路径)


@Erik:环境变量对你的进程实际上会发生改变吗?我认为你必须显式地处理某个窗口消息才能在环境发生变化时得到通知,而从外部来看,没有人会真正为你的进程执行这样的操作。 - Joey
我认为当一个账户从未登录/没有配置文件时,路径没有被设置,因此你最终会进入第4步(Windows目录)。只有在创建配置文件并重新启动进程后,新的环境变量才会显示出来。 - Erik Oppedijk

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