目前,我使用Path.GetTempPath()来确定在哪里写入日志文件,但最近我遇到了一台用户机器,其中返回的路径与我预期的不一样。
通常,返回的路径是C:\Documents和Settings[userid]\Local \Temp,但在本例中是C:\Temp
这通常不是问题,但由于某些原因,用户无法写入C:\Temp
我双重检查了环境变量,用户环境变量按预期指向了C:\WINNT\Temp. C:\和Settings[userid]\Local \Temp,而系统环境变量指向了Settings[userid]
所以..。Path.GetTempPath()从哪里得到它的值?组织政策?登记处?
我在谷歌上搜索过,但没有结果。
发布于 2010-03-02 17:42:51
(使用Reflector) Path.GetTempPath()最终调用Win32函数GetTempPath (来自kernel32.dll)。此状态的MDSN文档:
GetTempPath函数按照以下顺序检查环境变量的存在,并使用找到的第一条路径:
请注意,它们还声明不检查路径是否实际存在或是否可以写入,因此您可能最终会尝试将日志文件写入不存在的路径,或者您无法访问的路径。
发布于 2013-07-17 02:08:33
免责声明:不是一个答案,而是重要的阅读!
非常重要的是要认识到,你需要清理你的临时文件,因为当你点击65536在一个单一的目录,框架将不会再创建,你的应用程序会爆炸!
它们会在几个月或几个月内累积起来,然后你会收到这样的信息:
System.IO.IOException: The file exists.
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.__Error.WinIOError()
at System.IO.Path.InternalGetTempFileName(Boolean checkHost)
at System.IO.Path.GetTempFileName():当您尝试构建以下内容时,TFS会给您提供以下内容:
TF215097: An error occurred while initializing a build for build
definition XXXXX: The file exists. 您需要做的就是浏览到Path.GetTempPath()文件夹并调用del tmp*
注意:如果您有一个创建临时文件的ASP.NET应用程序,那么它的临时目录可能与当前登录的用户不同。
如果有疑问(或恐慌),只需创建一个aspx页面,打印出所使用的位置:
TempPath.aspx
<%@ Page Language="C#"%>
Temp path: <%= System.IO.Path.GetTempPath() %>对于我来说,当我以NetworkService的身份运行时
C:\Windows\TEMP\当以AppPool (命名为www.example.com)的形式运行时,路径可能是:
C:\Users\www.example.com\AppData\Local\TempPS。我认为这是可能发生的,即使你删除文件之后,因为文件名增加。
发布于 2018-04-09 09:26:39
如果您在MacOS上使用Mono Framework,那么Path.GetTempPath()返回的值就是环境变量TMPDIR的值。
运行echo $TMPDIR通常返回的值如下:
/var/folders/{2 character random-string}/{random-string}/Thttps://stackoverflow.com/questions/2365307
复制相似问题