.net - 你能假设总是有一个 Windows 临时文件夹吗?

标签 .net windows temporary-files temp

问题How to get temporary folder for current user很好地描述了如何查找要用于当前用户的临时文件夹。

Path.GetTempPath 的文档中它只指出了一种可能由于安全权限而出现的异常(exception)情况。

如果找不到临时文件夹,则不会提及故障模式。

无临时文件夹的情况是否现实?或者丢失的临时文件夹是否表明 Windows 更普遍被丢弃?

我想这个问题归结为:如果没有,需要临时文件夹尝试的应用程序是否需要检测/恢复/优雅地处理?或者,在正常运行的 Windows PC 上应该合理发生的事情之外,您可以盲目地依赖它吗?

(就我个人而言,我从来没有遇到过没有工作临时位置的 PC,但我们偶尔会收到来自最终用户的报告,似乎情况确实如此。但是,我可以想象该信息中会有一些噪音)。

最佳答案

我们在特定的 Windows Server 系统上有一个缺少临时文件夹的错误 - 必须有一些配置错误或类似的错误。此外,用户有权手动创建文件夹,因此我们只是在启动过程中添加了“如果缺少则创建临时文件夹”的保护措施。
但是,是的,这肯定是非常出乎意料的行为,我只在 1000 多个系统中的一个中看到过它。

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");
        }
    }

关于.net - 你能假设总是有一个 Windows 临时文件夹吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57675121/

相关文章:

java - java - 如何在java中创建一个临时文件而不附加随机数到文件名?

python - 如何获得 Python 中的默认文件权限?

c# - 如何读取 Azure 网站应用程序设置值

c# - 任务并行库异常处理

windows - 在工作组计算机上测试 Windows AD 集成

windows - 我可以将 AS400 上的 DB2 数据库转储到 Windows 或 Linux 吗?

windows - 如何在Windows中查找azure cli的位置

.net - 使用后删除临时文件

.net - 在单元测试中使用 Entity Framework 是一个好习惯吗?

c# - 在 JsonConvert.SerializeObject 中自定义标识参数