And*_*man 67 .net c# environment-variables special-folders
目前,我Path.GetTempPath()用来确定在哪里写我的日志文件,但最近我遇到了一个用户的机器,其中返回的路径不是我所期望的.
通常,返回的路径是C:\ Documents and Settings\[userid]\Local Settings\Temp 但在这种情况下,它是C:\ Temp
这通常不是问题,但由于某种原因,有问题的用户无权写入C:\ Temp
我仔细检查了环境变量,并且USER环境变量按预期指向C:\ Documents and Settings\[userid]\Local Settings\Temp,而SYSTEM环境变量指向C:\ WINNT\Temp.
所以...从哪里Path.GetTempPath()获得它的价值?组策略?注册?
我用谷歌搜索,但无济于事.
adr*_*nks 56
(使用Reflector)Path.GetTempPath()最终调用Win32函数GetTempPath(来自kernel32.dll).此状态的MDSN文档:
GetTempPath函数按以下顺序检查环境变量是否存在,并使用找到的第一个路径:
- TMP环境变量指定的路径.
- TEMP环境变量指定的路径.
- USERPROFILE环境变量指定的路径.
- Windows目录.
请注意,它们还声明它不会检查路径是否实际存在或可以写入,因此您可能最终尝试将日志文件写入不存在的路径,或者您无法访问的路径.
Sim*_*ver 14
非常重要的是要意识到你需要清理你的临时文件,因为当你在单个目录中达到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():
Run Code Online (Sandbox Code Playgroud)
当你尝试构建时,TFS会给你这个:
TF215097: An error occurred while initializing a build for build
definition XXXXX: The file exists.
Run Code Online (Sandbox Code Playgroud)
您需要做的就是浏览到该Path.GetTempPath()文件夹并致电del tmp*
注意:如果您有一个ASP.NET应用程序创建临时文件,其临时目录可能与当前登录用户不同
如果有疑问(或恐慌),只需创建一个aspx页面打印出正在使用的位置:
TempPath.aspx
<%@ Page Language="C#"%>
Temp path: <%= System.IO.Path.GetTempPath() %>
Run Code Online (Sandbox Code Playgroud)
对我来说,运行的时候为NetworkService我得到
C:\Windows\TEMP\
Run Code Online (Sandbox Code Playgroud)
当作为AppPool(名为www.example.com)运行时,路径可能是:
C:\Users\www.example.com\AppData\Local\Temp
Run Code Online (Sandbox Code Playgroud)
PS.我认为即使您之后删除文件也会发生这种情况,因为文件名增加了.
| 归档时间: |
|
| 查看次数: |
28259 次 |
| 最近记录: |