问题如何获取当前用户的临时文件夹很好地描述了如何查找要用于当前用户的临时文件夹。
Path.GetTempPath
的文档中,仅指出了一种由于安全权限而可能出现的异常。
如果找不到临时文件夹,则不会提及故障模式。
无临时文件夹的情况现实吗?或者丢失的临时文件夹是否表明 Windows 等内容已被更普遍地垃圾化?
我想这个问题可以归结为:需要临时文件夹尝试的应用程序是否需要检测/恢复/优雅地处理(如果没有)?或者这超出了正常工作的 Windows PC 上应该发生的情况,以至于您可以盲目依赖它?
(就我个人而言,我从未遇到过没有工作临时位置的电脑,但我们偶尔会收到最终用户的报告,似乎是这种情况。不过,我可以想象该信息中存在一些噪音)。
特定 Windows Server 系统上存在缺少临时文件夹错误 - 一定存在某些配置错误或类似情况。此外,用户有权手动创建文件夹,因此我们只是在启动过程中添加了“如果丢失则创建临时文件夹”保护措施。
但是,这确实是非常意外的行为,我只在 1000 多个系统中的 1 个系统上看到过这种情况。
System.ComponentModel.Win32Exception (0x80004005): The system cannot find the path specified
at Microsoft.Win32.NativeMethods.CreateDirectory(String path, SafeLocalMemHandle acl)
at System.CodeDom.Compiler.TempFileCollection.CreateTempDirectoryWithAce(String directory, String identity)
at System.CodeDom.Compiler.TempFileCollection.GetTempFileName(String tempDir)
at System.CodeDom.Compiler.TempFileCollection.EnsureTempNameCreated()
at System.CodeDom.Compiler.TempFileCollection.AddExtension(String fileExtension, Boolean keepFile)
at System.CodeDom.Compiler.TempFileCollection.AddExtension(String fileExtension)
at Microsoft.CSharp.CSharpCodeGenerator.FromSourceBatch(CompilerParameters options, String[] sources)
尚未尝试此操作,但在 C# 中似乎开销很小并且省去了零星的麻烦:
private void GenerateTempPathIfNeeded()
{
var path = Path.GetTempPath();
try
{
if (!Directory.Exists(path))
Directory.CreateDirectory(path);
}
catch (Exception ex)
{
MessageBox.Show($"something");
}
}
使用 GetTempPath 检索此文件夹。
GetTempPath 函数按以下顺序检查环境变量是否存在,并使用找到的第一个路径:
The path specified by the TMP environment variable. The path specified by the TEMP environment variable. The path specified by the USERPROFILE environment variable. The Windows directory.
微软说。
这是一个主观问题,但我会将其不可用视为致命错误,就像我对因安全权限而无法访问的 TEMP 文件夹所做的那样。
当 ASP.NET 应用程序在以下情况下无法生成临时文件(例如 XML 序列化程序集)时,我看到了安全错误:
%Windows%\Temp
文件夹